アクションコントローラーの保存を多階層化

アクションコントローラーの保存を多階層化して、多数のコントローラーを整理できるようにした。
Zend_Controller_Dispatcher_Standardのコントローラー名解決でサブディレクトリ仕様にしてみた。
Zend_Controller_Dispatcher_Standardを継承したクラスを作って、
_formatName内で下記のように一行変更する。

<?php
// $segments[$key] = str_replace(' ', '', ucwords($segment));
$segments[$key] = str_replace(' ', $this->getPathDelimiter(), ucwords($segment));

あとは、フロントコントローラーにsetDispatcherでnewして注入するだけ。
/foo-bar/baz/
へのリクエストを
controllers/foo/barController.php
で処理できるようになる。

ビューの保存場所についても区分できるようになった。

デメリット

継承する基底クラスをインクルードするのが面倒・・・
モジュール上でautoloaderを通すか。

動機

http://d.hatena.ne.jp/noopable/20090204/1233700976
この関係で、ページクラスなどコントローラーの分類に意味付けすることも同時に処理できそうだ。Dispatcherをちょいと調整して次に進むことにする。

検討した内容

  • モジュール内にコントローラーを識別できるサブディレクトリを作り区分する
  • 用途によってコントローラーに接頭辞を付けて管理する。
    • 接頭辞に対応するディリレクトリにコントローラーを保存。
  • 解決方法の変更
    • 元仕様:foo-barコントローラーはFooBarControllerへマップ
      • クラス名はModule_FooBarController
    • 変更仕様: foo-barコントローラーはfoo/BarControllerへマップ
      • クラス名はModule_Foo_BarControllerになる。
  • ルーティングの内部ルールとして、page接頭辞を持つコントローラーにするように運用。
    • 外部から直接来てもらいたくないコントローラーについては、コントローラー側でAcl実装を行う。
    • dispatcherのisDispatchableに機能追加する方が固いが、オプションの注入が面倒。