Home > PHP | Program > Symfonyのactions.class.phpを分割する

Symfonyのactions.class.phpを分割する

記事に連続性がありませんね。 仕事中に見つける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)の処理使用されるようです。
うっかりさんが追加しちゃっても安心ですね。

とまぁ書いてみましたが、調べただけで実用してないのでもしかしたら間違いがあるかも。
次のプロジェクトで採用してみようと思います。

Comments:0

Comment Form
Remember personal info

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 私事。 跡地

Home > PHP | Program > Symfonyのactions.class.phpを分割する

Search
Feeds
Meta

Return to page top