記事に連続性がありませんね。 仕事中に見つけるTipsなのでご了承。
あと、今まで付けていたエントリータイトルの[ tag ]を外しましたよ。 これからも外します。
理由はWordpress側でタグ付けが出来るようになったからですな。 便利便利。
PHPフレームワークのSymfonyネタです。 今まで知らなかったので載せます。
symfonyのactionクラスは {root}/apps/{appname}/modules/{modname}/actions/ に actions.class.php という名前で保存されています。
http://hoge.com/{modname}/index にアクセスするには actions.class.phpに executeIndex() というメソッドを加えればOK.
というのは基本ですが、メソッドが増えることも多いはず。
DRYを気にせずに書いてしまうと100kb超えなんて目じゃないぜ!
と、目指したくもないので分けます。
今回は例として、modnameをtestとします。 作るメソッドは postとview にします。
1ファイルだとこんなコードになるはず。
class testActions extends sfActions
{
public function executeIndex()
{}
public function executePost()
{}
public function executeView()
{
$this->param1 = $this->getRequestParameter(‘param1′);
}
}
これでも分かりやすくていいですが、他にも処理が増えたりすると他の人とソースコードが被ってしまうとタイヘンなので分けます。
するとこうなります。
actions.class.php
class testActions extends sfActions
{
public function executeIndex()
{}
}
postAction.class.php
class postAction extends sfActions
{
public function execute()
{
}
}
viewAction.class.php
class viewAction extends sfActions
{
public function execute()
{
var_dump($this->getRequestParameter(‘param1′));
}
}
簡単ですね?
クラス名がファイル名と同一でメソッド名になって、executeXxx() は execute() になるだけ。
フォームのPOSTなんかも今まで通り特に変更なしで通りますし、テンプレート名もそのまま。
いちいち分けるほどでもないメソッドは actions.class.php に残しておいてもOK.
クラス内でだけ使いたいメソッドがあったら・・・うーん、myUser.class.phpにでもぶち込めばいいのかな。
ちなみに分けたメソッドと同一のものが actions.class.php にある場合は、分けられた側(xxxAction.class.php)の処理使用されるようです。
うっかりさんが追加しちゃっても安心ですね。
とまぁ書いてみましたが、調べただけで実用してないのでもしかしたら間違いがあるかも。
次のプロジェクトで採用してみようと思います。
- Newer: CPANメモ
- Older: [ memo ][ JavaScript ] Fxでのフォーム配列のいじり方
Comments:0
Trackbacks:0
- Trackback URL for this entry
- http://francisca.cc/2008/09/01/symfony%e3%81%aeactionsclassphp%e3%82%92%e5%88%86%e5%89%b2%e3%81%99%e3%82%8b/trackback/
- Listed below are links to weblogs that reference
- Symfonyのactions.class.phpを分割する from 私事。 跡地