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_さんです!お楽しみに

CakePHPで複数形は大切

@kashiokaです。
アップが遅くなってしまいすいませんm(__)m

CakePHP Advent Calendar 2011の5日目を書かせていただきます。

ブログの移転を行うのに、バックアップを忘れてしまい。
googleのキャッシュからサルベージするという地道に作業を行ったのですが。
その際、昔のアクセスの多かったものについてリダイレクトの処理を入れてました。
(wordpressのプラグイン「Redirection」凄く便利です。)

そこでcakeのページを見たところ
複数形のページのアクセスが結構多かったため、このテーマをもう少し書いてみたいと思います。

bakeでモデルの生成の生成を行うと
Given your model named ‘Information’, Cake would expect a database table named information
というように言われる場合があります。
bakeの場合は結局は
Do you want to use this table? (y/n)
と聞かれて確認できるのですが、bakeしないで作成した場合等は注意が必要です。

CakePHPではテーブルの参照では、モデル指定の複数形が指定されます。
モデルbookであればbooks等
しかし上記エラーのようにinformationを指定した場合は、テーブル名はinformationとなります。
英語力無い、私だけかもしれませんが
よくモデルInformationを作成しては「DBつながらねー」見たいなことに陥ります。

基本的には規約にあったモデル名を使用するのが良いと思います。
どうしても規約に乗りたくない場合は

モデルの定義で
class Hogehoge extends AppModel {
var $name=’User’;
var $useTable=’Users_no_table_mei’;

のようにしてテーブル名を指定することが出来ます。

ちなみにこの処理を行っているのは
libs/inflector.php
でここに
単数形->複数形
複数形->単数形
複数形でも変わらない単語の処理が書いてあります。
一度、のぞいてみてください。

で話を戻しますが、元々のエラーのInformationは複数形もInformationなのです。
(自分でデータベース作ったりするとInformationsで作ったりして困ります。)

DBが参照出来ないときとか、一度複数形を疑ってみてみましょう!
とりあえずは辞書検索とか、、、(笑

ちなみに、この部分バグもあったみたい
http://cakephp.lighthouseapp.com/projects/42648/tickets/2149

1系ではnode_mediaというのが正しく表示されないようです。2で直っているようです。
(てかnode_mediaってなんだ?)

複数形にどんな風に変換されるかは
include_once(“cake/libs/inflector.php”);
$word = “node_media”;
echo “pluralize:”.Inflector::pluralize($word);

とかでできます。(cakephp的にしてなくてすいません)

ヘルパーにするなら
http://debuggable.com/posts/cakephp-pluralize-helper:480f4dfe-fbf8-464a-95da-4764cbdd56cb
にありました
class PluralHelper extends Helper {
function ize($s, $c) {
if ($c != 1) {
return $c . ‘ ‘ . Inflector::pluralize($s);
}
return $c . ‘ ‘ . $s;
}
}
のような感じでこのクラスを利用することができます。

ありがちなパターンでpeopleやwomanとか注意です!
ということで中学生の英語の授業って大切ですねw

少しでもinformationで繋がらない人が減ればと思います。

追記:次の@k1Lowさんから

CakePHPにおける複数形はCakePHP自体がどう判定するのかがInflectorクラス次第ですからね。
ちなみにcake.elはInflectorクラスをEmacs Lispでインプリメントして利用しているので安心です。

とのコメントいただきました。Emacs使いな方は試してみてください。
私はVi派なので、、、

雑文で失礼しました。

次は@k1LoWさんです!
みなさん、お楽しみに