CakePHP 1.2RC3はPluginの仕様が変わってるのアンサー
CakePHP 1.2RC3はPluginの仕様が変わってる | Shin x blog
のアンサーなんですが、
[変更点:1] コントローラ、モデルの命名規則について
これまではPluginのコントローラ・モデルは、ファイル名とクラス名にPlugin名を先頭に付ける必要がありました。
しかしRC3の仕様では、Plugin名を付けてはいけません。
プラグインを使い出したのがRC3(さらに今はNightly版を使っているの)で、従来の部分がよくわらなかったりしますが・・・
プラグインへのアクセスURLの表記がなかったので、ちょっと外してるかもしれません><
今回のフォームメールプラグインの例でいいますと、
Plugin名: FormMail[form_mail] 管理画面: アクセスURL: /admin/form_mail/form_mail_forms 呼び出されるコントローラ: app/ plugins/ form_mail/ form_mail_forms_controller.php の function admin_index() 表示画面: アクセスURL: /form_mail/form_mail_forms/view/{id} 呼び出されるコントローラ: app/ plugins/ form_mail/ form_mail_forms_controller.php の function view($id) |
上記のURLで問題なく動作するので、コントローラ名の競合を避けるためにも、今までの命名規則は守った方がいいように思います。
長ったらしいURLになってしまいますが、最終的に app/config/routes.php で整理すればいいやと思っています。
[変更点:2] コントローラ、モデルの親クラスについて
さらにこれまではPluginのコントローラ・モデルの親クラスとして、%Plugin%AppController、%Plugin%AppModelクラスを定義する必要がありました。
しかしRC3の仕様では、任意となり、通常のAppController、AppModelクラスを継承してもokになりました。この場合は%plugin%_app_controller.php、%plugin%_app_model.phpを設置しなくても良いです。
もちろん従来どおり基底クラスファイルを設置して継承するのもokです。基底クラスファイルはフレームワークが自動で読み込んでくれます。
もちろん、AppController、AppModelクラスを継承してもokなんですが、なるべくプラグイン内で機能を完結すると言う意味で、自分は%plugin%_app_controller.php、%plugin%_app_model.phpの設置を推奨します。
例えば、今までapp層で作っていたアプリをプラグイン化する際に、app_controller.phpやapp_model.phpに何らかの処理を記述していた場合、そのままにしてしまうと、app層に依存したプラグインになってしまうので、プラグインフォルダのコピーで再利用といった手軽さが失われてしまいます。
もちろん、移せない事情等ある場合もありますが、自分は極力プラグインフォルダ単体で動くようにしています。
考え方としては、
- plugin層: 個別機能の処理を書く
- app層: 個別機能を組み合わせた処理を書く、または各Pluginで共通に使用する処理を書く
といった感じです。
Pluginで共通に使用する処理をapp層に書いたら、Pluginがappに依存しまくりじゃねーか!って矛盾がでてきますが、あくまでもDRYな方向で個人のさじ加減でお願いします。
自分の例では、自分用のPaginatorHelperをすべてのviewで使いたかったので、app/views/helpers/my_paginator.php としてたりします。
あと、そのプラグインでしか使わないコンポーネント・ヘルパー・ビヘビアがあれば、プラグインの中に入れてます。
なにか齟齬があれば、また突っ込んでください(;^ω^)