2011-10-26 6 views
0

私のサイト構造は、現在、このようなものです:Zend Frameworkのモジュールコントローラを拡張

/cms/ 
    /data/ - caches etc 
    /modules/ 
    /public/ - aliases from site public folders 
/website1 
    /images 
    /layouts, views, scripts, css etc 
    (no index.php because of the alias) 

これは正常に動作し、私のシステムは、アプリケーションを実行するために、エイリアスフォルダに見えます。しかし、私は現在、モジュールコントローラの1つを拡張したいと思っています。

理想的には私の構造は次のようになります。

/cms/ 
    .. as above 
    /CLIENT_ID/ 
     /modules 
      ..extending/overriding scripts 

しかし、これは問題です:呼び出されるコントローラは、(Module_IndexControllerなど)Zendのファイル名の構造に応じて呼び出される必要があり、その基底クラスを拡張します次のようになります。

Module_IndexController extends Module_IndexController 

これは明らかにうまく動作しません。私の考えは、それがあるべきであるということである。

CLIENTID_Module_IndexController extends Module_IndexController 

しかし、私はこれを実装する方法についてのアイデアにこだわっていますか?フロントコントローラにaddControllerDirectoryを使用してコントローラディレクトリを追加できますが、呼び出されたクラス名をどこかに変更する必要があると思いますか?

次に、フォルダがディレクトリであるかどうかを確認して、ベースクラスではなくオーバーライドクラスを実行することができます。

アイデア?私は、フォルダを再構築するために開いているが、明らかにパブリックフォルダにメディアファイルを保持する必要があります。

答えて

0

問題はZend_Dispatcher、Zend_AutoloaderとZend_Controllerのはで動作するようにプログラムされconventional directory structureを使用していないということです。

  1. Zend_Autoloaderをカスタマイズし、Zend_ControllerのとZend_Dispatcher:私の意見では

    は、次の2つの可能な解決策を持っています。可能なカスタマイズはhere,hereおよびhereです。
  2. ディレクトリ構造。この第2のケースで

はtheese可能projectualな選択肢を検討してください。

  • は、すべてのサイトに対して独立したスタンドアロンZend Frameworkにプロジェクトを作成し、それらの中で、以前のようなCMSフォルダ
  • のエイリアスを作成しますが、ライブラリとしてCMS を使用し http://framework.zend.com/manual/en/zend.controller.modular.html#zend.controller.modular.directories
  • :あなたは外のフォルダ内のすべてのCMSファイルを置くと、モジュールの位置をカスタマイズします、次にwebsiteNのapplication.iniにincludePaths.library = /path/to/cms/folder"と設定します。あなたのプロジェクトを知って評価しなければならない、この可能性には多くの問題があります。このようにしてモデルを呼び出したり、ウェブサイトのクラスを拡張してCMSを拡張することはできますが、さまざまなレベルでのユーザーインタラクションのエントリポイントとマネージャとしてCMSを使用することはできません。
0

あなたが言ったように、Zendに各モジュールのベースコントローラディレクトリを伝えることができます。

$controller = Zend_controller_Front::getInstance(); 
$controller->setControllerDirectory(
    array("module_name" => "directory_path") 
); 

私はZendが命名規則をClientId_Module_Controllerにしたいと思います。しかし、実際に命名規則に慣れていて、PHP 5.3を使用している場合は、名前空間を使用できます。

関連する問題