2011-11-08 5 views
0

私はいくつかの助けを探しています適切に、次のアプリケーションのファイル構造に似た何かを達成するなど、自分のアプリケーションのオートローダー、ブートストラップのセットアップ中:Zend Framework HMVC Architectureのヘルプ?

/application 
    /configs 
     application.ini 
    /controllers 
    /models 
     /User.php // Model_User 
    /modules 
     /blog 
     /admin 
      /controllers 
       /IndexController.php 
      /models 
       /User.php // Model_User 
      /views 
       /blocks 
        /menu.phtml 
       /helpers 
        /CoolMenu.php 
       /layouts 
        /layout.phtml 
       /scripts 
        /index 
         /index.phtml 
         /list.phtml 
       /themes 
        /some-custom-theme 
         /helpers 
         /layouts 
          /layout.phtml 
         /scripts 
          /index 
           /index.phtml 
           /list.phtml 
          /users 
           /index.phtml 
           /list.phtml 
           /list.ajax.phtml 
    /views 
     /blocks 
     /layouts 
     /scripts 
     /themes 
      /some-custom-theme 
       /blocks 
       /layouts 
       /scripts 
       /helpers 
    /Bootstrap.php 
/library 
    /Zend 
    /MyCompany 
     /Model 
      /Api 
       /Abstract.php 
/public 
    /css 
    /js 
    /images 
    /themes 
     /some-custom-theme 
      /css 
      /js 
      /images 

ここで当然の考え方は、基本的な「アプリケーション構造体はモジュールによってオーバーライドされ、ビューはどちらのレベルでもテーマによってオーバーライドされます。

Zend Frameworkの概念と「理想」に可能な限り密接に従いながら、できるだけシンプルでエレガントなものにして、できるだけ「主流」のZFアプローチを使用しながら、次のような状況に対処する?モジュールのリソースで上書きしますが、オートローダーを設定し、きれいにが、必ずしもではありません!)とすることができるアプリケーション・コントローラ、モデル、ビュー、およびその他のアプリケーションのリソースを処理するためのパスが含まれますどのように

  1. これらの各シナリオのデフォルトのビューリソースをテーマリソースで上書きできるように、ビューをどのように初期化しますか?

    ちょうど私が、これはかなり一般的な、オープンエンドの要求であることを理解が、私は今、数日間、この上で研究と実験をしてきた、私はダース以上の異なるアプローチを試みたと私

それはすべて働くように見えることはできません。私が試したことは、何か他のものを壊すように思える、または私はちょうどZFで、または何でも正しい方法を見つけることができません。私はちょうど新鮮な視点からいくつかの新鮮なアイデアを聞きたいと思っています。私完全な解決策を期待して、私はちょうどより有用な方向に私を考えさせるためにいくつかの強固なアイデアが必要です!

PS:私はビューパスZF 1.11

+0

これを読んでください:異なるレイアウトを設定するためのhttp://stackoverflow.com/questions/7928771/zend-framework-doctrine1-2-project-structure-with-more-modules/7969590#7969590! ;) – JellyBelly

答えて

1

を使用してい容易[1]ビットです。追加のスクリプトパスを追加することができ、これらはLIFOの順番でチェックされます。したがって、各モジュールに対して、標準パスとテーマパスがあります。私は過去にStackoverflowにこのコードを投稿していると確信していますので、テーマのものをやろうとしている人のために古い質問を検索すると見つけられるはずです。レイアウトは同様の方法で動作しますが、モジュールレベルではなくアプリケーションレベルでオーバーライドしただけです。

モデルでは、オーバーライドされたモデルがどこにあるのか正確にはわかりませんが、一般的に答えるために、PHPはincludeパスを使ってほとんどの作業を行います。だから、単にあなたの 'オーバーライド'ディレクトリをインクルードパスの先頭に追加すれば、クラスが見つかるまでPHPはそれぞれをチェックします。要件がそれより少し複雑な場合は、独自のオートローダーの作成を検討することができます(http://framework.zend.com/manual/en/zend.loader.autoloader.html#zend.loader.autoloader.interface参照)。

コントローラは慣習的な意味でオートロードされていないので、そのファイル名と位置は単にフロントコントローラに供給されるパスに基づいていると想定されています。コントローラの/modules/admin/themes/foo/controllersが存在するかどうかを確認し、その場合は/modules/admin/controllersの代わりにモジュールのコントローラパスとして使用することで、モジュールのコントローラのすべてのコントローラのうちのを無効にすることができます。しかし、それはすべてか何もないアプローチになります。モジュールのコントローラーをオーバーライドしたい場合は、それらをすべて実行する必要があります。 Zend_Controller_Frontクラスを掘り下げると、より良い方法が見つかるかもしれません。

[1]ここでは簡単に関連性があります。これらのすべては、ZFでかなり快適である必要があります。

+0

アイデアありがとう、これはまさに私が探していたものでした。また、あなたが参照していたコードが見つかったかもしれませんが、まだわかりません:http://stackoverflow.com/questions/6069488/zend-overwrite-default-view-object –