2.6公開間近!!Ethnaを5分でインストール

k-holyさんの エラーハンドラと例外ハンドラによるエラー処理 (PHP Advent Calendar jp 2011 Day 11)、に続いてPHP Advent Calendar jp 2011 12日目はじめます。

PHP Advent Calendar jp 2011

にある「書くTipsは、10分で考えて、5分で書ける内容で ok です。」に甘えて書きたいと思います。

今回のテーマはEthnaのインストールです。既に使われているかたはスルーしてください。一昔前はちょいちょい話に出てきましたが、最近影の薄くなったEthnaに日を当てたいと思います。

早速はじめます。

Ethnaの特徴は

  • わかりやすい MVC 風の構造
  • 圧倒的に簡潔で強力なフォーム機能
  • 「理想の追及」よりも「実際のアプリケーション開発」に重点をおいた現実的な設計思想

となっています。

最近のフレームワークでは普通な事かもしれません

しかしEthnaには重要なキーワードがあります。

『絶妙に妥協』

このキーワードも絶妙ですが、ほんといい感じなんですよね

なんでも上手い事やれて自由なんですけど、要所で面倒くさい(制約がちゃんとある)。

弱点というと、人口が少ないので、色々な要望にプラグインやらライブラリで対応出来ないというところでしょうか

自分でがしがし作れる人にはほんっといい感じなんです。

ということで5分で準備完了なので、その手順の解説です。

PEARインストール

1.pearチャンネルの登録

[php][root@localhost]#pear channel-discover pear.ethna.jp[/php]

2.ethnaをpearインストール

[root@localhost]#pear install -a ethna/ethna-beta
これで準備完了です!

stable版の2.5を利用する場合は
[root@localhost]#pear install -a ethna/ethna
です。

3.インストール確認

インストールが完了するとethnaコマンドが利用出来るようになります。
[kashioka@localhost ~]$ ethna -v
とすると
バージョンに引き続き
Ethna開発に携わった偉大な人々の名前が表示されます。
Ethna 2.6.0-beta3 (using PHP 5.3.8)
.

4.プロジェクトの作成

ethnaでプロジェクトを作成するためには
プロジェクト名とプロジェクトの配置ディレクトリを決めてください。

ここでは
プロジェクト名:sample
配置先:/home/phpkashioka/
とします。
プロジェクトの作成にもethnaコマンドを使用します。
[kashioka@localhost phpkashioka]$cd /home/phpkashioka
[kashioka@localhost phpkashioka]$ ethna add-project sample
creating directory (/home/phpkashioka/sample) [y/n]:
と聞かれます。
プロジェクトの配置先があっていればyを入力してください。
パーミッション等に問題が無ければ、必要なファイルがプロジェクトディレクトリに生成されます。
最後に
project skelton for [sample] is successfully generated at [/home/phpkashioka/sample]
と表示されればインストールは完了です。

5.ヴァーチャルドメイン設定

[kashioka@localhost sample]$ pwd
/home/phpkashioka/sample
[kashioka@localhost sample]$ ls
app  bin  etc  lib  locale  log  schema  skel  template  tmp  www
プロジェクトの配下には
app アプリーケーションディレクトリ
bin コマンドラインスクリプト
etc 設定ファイル等
lib アプリケーション用ライブラリ置き場
locale 言語ファイル
log ログディレクトリ
schema DBスキーマ置き場
skel スケルトンファイル
template アプリケーション用テンプレートディレクトリ
tmp テンポラリーディレクトリ
www 公開用ディレクトリ
といったディレクトリがあります。
このwwwディレクトリをヴァーチャルドメインに設定することで
ブラウザから確認が行えます。
conf.d/以下にphpkashioka.confのように設定するか
.htaccess等でバーチャルドメインの設定を行ってください。
ここではphp.example.comでアクセスを行うことを想定しています。

 <VirtualHost *:80>
ServerName php.example.com
DocumentRoot /home/phpkashioka/sample/www
ErrorLog logs/phpkashioka-error.log
CustomLog logs/phpkashioka-access.log combined env=!no_log
</VirtualHost>

ブラウザよりphp.example.comにアクセスすると

このように表示されればインストールは完了です。

アーカイブインストール

pearでインストール出来ない場合はアーカイブをそのままコピーしてEthnaのセットアップを行うことが出来ます。

https://github.com/ethna/ethna/downloads
githhubよりzipかtar.gzでダウンロードします。

[kashioka@localhost ~]$unzip ethna-ethna-2.6.0beta3-0-g8ba873d.zip

これで作業ディレクトリにファイル解凍されますので
こちらをEthna配置用ディレクトリにコピーします。(ここでは/home/phpkashioka/)
[kashioka@localhost ~]$ mv ethna-ethna-
ethna-ethna-2.6.0beta3-0-g8ba873d.zip ethna-ethna-8ba873d/
[kashioka@localhost ~]$ mv ethna-ethna-8ba873d/ /home/phpkashioka/Ethna
[kashioka@localhost ~]$ cd /home/phpkashioka/
[kashioka@localhost phpkashioka]$ php Ethna/bin/ethna_handle.php -v
Ethna 2.6.0-beta3 (using PHP 5.3.8)

Copyright (c) 2004-2011,

http://ethna.jp/
と見れれば、もう準備は完了です。

アーカイブインストール時の追加作業

1.ethnaコマンドを使用できるようにする

上記ではethna_handle.phpを使用しています。アーカイブのコピーではethnaコマンドは自動で利用できるようになりませんので、追加の作業が必要になります。

.bashrc等に

# .bashrc
alias ethna=’php /home/phpkashioka/Ethna/bin/ethna_handle.php’

として

source ~/.bashrc

で有効にしてください

ごれで疑似的にethnaコマンドの利用が出来ます。

[kashioka@localhost bin]$ ethna -v
Ethna 2.6.0-beta3 (using PHP 5.3.8)

実際に実行するためにはアーカイブインストールの場合は

2.include_pathを設定する。

php.iniやini_setで上記のEthnaディレクトリにパスを通してください。

php.iniの場合は

include_path = “.:/home/phpkashioka/”

のように記述してください。

3.Smartyの追加

このままではSmartyが入っていない場合はエラーが発生しますので

[kashioka@localhost ~]$wget http://www.smarty.net/files/Smarty-2.6.26.zip

[kashioka@localhost ~]$unzip Smarty-2.6.26.zip

で解凍したあと、先ほどの作業ディレクトリにSmartyフォルダとしてコピーしてください。

[kashioka@localhost ~]mv Smarty-2.6.26/libs /home/phpkashioka/Smarty

ここまで行えば、PEARインストールと同様にヴァーチャルドメインの設定を行って

http://php.example.com

からサンプル画面を表示することが出来ます。

PEARインストールなら5分で実行できますが

アーカイブインストールだと5分は厳しいですね(環境等にも左右されますし)

以上、Ethnaのインストールについてでした。

ほとんどが公式ページにのっているものですm(__)m

ちなみに2.6のドキュメントはTOPからよりhttp://ethna.jp/doc/からの方が行きやすいです。

もうすぐ2.6リリースされるらしいです。非常に期待しています。是非みなさんもEthna使ってみて、いつかEthna祭りやりましょうw

明日のPHP Advent Calendarはredsnow_さんです!お楽しみに

Ethna_Session

なんかプロバイダの関係かちょこちょこ接続IPが変わってて
Ethnaのセッションが上手く動いてなかった

Ethna_SessisonでREMOTE_ADDR見てるとこがあるので
最初isVallidを空でオーバライドしたんだけど
だめな場合があったので

session_start) {
if (!empty($_COOKIE[$this->session_name]) || session_id() != null) {
setcookie($this->session_name, “”, 0, “/”);
}
return false;
}
return true;
}
}
?>
のようにして
Controlerでこのセッションを利用するように記述した

Ethna セットアップでいまさらForbidden

Forbidden

You don’t have permission to access /index.php
on this server.

えっ!

でもってログを見てみれば

Symbolic link not allowed or link target not accessible

はいはい、そういえば、あったな

とapacheの設定を見てみるも

には

Options FollowSymLinksと記述されている

記憶を呼び覚ますと、やっと気づいたethnaの動作確認で$ ln -s /home/test/sample/www/index.php .的なことをやっていたんだがsampleは755になってるんだけどその上位のtestが700になってた

Post to Twitter

Ethna:getObjectPropList

たぶんこれ使いこなすと便利になるのかな?とりあえずクラスドキュメントから引用 getObjectPropList (line 207) オブジェクトプロパティの一覧を返す getObjectList()メソッドは条件にマッチするIDを元にEthna_AppObjectを生成するためコストがかかる。こちらはプロパティのみをSELECTするので低コストでデータ を取得することが可能。 * return: array(0 => 検索条件にマッチした件数, 1 => $offset, $countにより指定された件数のプロパティ一覧) Ethna_Error:エラー * access: public mixed getObjectPropList (string $class, [array $keys = null], [array $filter = null], [array $order = null], [int $offset = null], [int $count = null]) * string $class: Ethna_AppObjectの継承クラス名 * array $keys: 取得するプロパティ一覧(nullなら全て) * array $filter: 検索条件 * array $order: 検索結果ソート条件 * int $offset: 検索結果取得オフセット * int $count: 検索結果取得数

cakePHP modelの再定義

データベースが開発途中で変更された場合
序盤は変更も踏まえてbakeでサンプル作ったりすると思うのですが
再定義したもので再度bake使用と思うと昔の定義のまま選択肢が出てきたりします
どっかで似たことやったなーと思ったら、確か昔Ethnaでも同様のエントリ書いたの思い出しました。
ということできっとキャッシュが悪さしているということで
/home/cool/cake/app/tmp/cache/models
にありました
この中にあるcake_model_default_**
なファイルを削除して再度bakeすると
新しい定義が選択肢に表示されます

ActionFormの継承

入力画面->確認画面を二つのアクションに割り振った場合等最初のアクションフォームの定義と同じなものを確認画面で書くのを手抜きしたいので確認画面側でextendsしてアクションフォームを作成するそのとき class Admin_Form_TemplateAddDo extends Admin_Form_TemplateAdd としただけではファイルの実態を見つけられないようなので(パスの直下じゃないから?) Action.php Action/Do.php のような構成の場合は require_once dirname(__FILE__).’.php’; と記述する最初実態で require_once ‘Action.php’; でいいじゃんと思ったけど Action.php Action/Do.php Action/Do2.php とかなったときに便利なのか? 大本はたしかEthnaのサイトのサンプルを参照(?) /** * Template/Add/Do.php * * @author hideo kashioka * @package Admin * @version $Id: skel.action.php,v 1.8 2006/07/10 13:47:33 fujimoto Exp $ */ require_once dirname(__FILE__).’.php’; /** * template_add_doフォームの実装 * * @author hideo kashioka * @access public * @package Admin */ class Admin_Form_TemplateAddDo extends Admin_Form_TemplateAdd { } こんな感じで if ($this->af->validate() > 0) { return ‘template_add’; } とか、そのまま使えるようになる