ぐらめぬ・ぜぷつぇんのはてダ(2007 to 2011)

2007年~2011年ごろまで はてなダイアリー に書いてた記事を引っ越してきました。

Controllerで使ってはいけないAction名について

またまたまた嵌りました。
"process"というアクションを作ったのですが、そのControllerの"index"アクションを呼ぶと、なぜかその中で使っているモデルについて

[13-Mar-2008 13:28:02] PHP Fatal error:  Class foobar:  Cannot inherit from undefined class activerecord 
    in app/models/foo_bar.php on line 3

というのが出ちゃって、「なんでなんだぁぁああああ」とAk::importやAkActionControllerをひっくり返していたんですが。

要するに、AkActionController#process()メソッドの上書きをしちゃった事になったため、本来の"process"メソッド内で処理されている筈のrequireだの前処理がすっとばされたため、このようなエラーが出てたみたいです。

CakePHPもそうですが、Action名をそのままメソッド名にするタイプのフレームワークでは常に、こうした親クラスのメソッド名と同じアクション名を指定できない制限が発生します。Akelosの場合の、親クラスのメソッド名はhttp://api.akelos.org/のAkActionControllerのpublicメソッド名で調べることができますので、事前にこれらのメソッド名と重複しないよう、Action名を吟味する必要があります。また、大文字小文字の差異はPHP4では無視されますので、そこにも注意を払う必要があります。
っつーかね。いい加減、prefix無しでAction名のメソッド作るの、止めない? To CakePHP, Akelos

symfonyはちゃんと"execte" + Action名のCamelCase みたいに区別できてるよ?Controllerの親クラスのメソッド名と干渉しないようになってるよ?ねぇねぇ。

この辺のセンスというか哲学はすげー理解に苦しむ。「設定より規約」という思想は分からないでもないが、どうしてこう、嵌りやすい規約を作ったりするのか。今回の不必要な「規約」とやらで毟り取られた俺の時間を返せ!
(*`Д´)=○)Д゚) ´Д゚)・;’