2011-11-22 6 views
3

Zend Frameworkのモジュールディレクトリの外にモデルを置いて欲しいです。正確には、/ライブラリフォルダ内のZend Frameworkのライブラリディレクトリにモデルを置く

library/ 
    models/ 
    actors/ 
     ActorsMapper.php 
     Actor.php 
    books/ 
     BooksMapper.php 
     Book.php 

INSTEAD OF

application/ 
modules/ 
    models/ 
    actors/ 
     ActorsMapper.php 
     Actor.php 
    books/ 
     BooksMapper.php 
     Book.php 

私は、私が作成したモジュールのそれぞれに別々のモデルを作成する必要がないようにこれが行われます。 どのような設定を変更する必要がありますか? 詳細が必要な場合は、お尋ねください。

ありがとう:)接頭辞で始まる名前

答えて

2

最初の回答はうまくいきますが、ブートストラップにautoloadを登録したい場合は、別の回答をします。

1) 'models'フォルダをすべてのTable.phpファイルを含むライブラリに配置します。

すべてのモデル/クラスが持っている必要があります。

class Model_Table extends Zend_Db_Table_Abstract{ ... } 

2)bootstrap.phpのプットで:

protected function _initAutoLoad() { 
    // Add autoloader empty namespace 
    $autoLoader = Zend_Loader_Autoloader::getInstance(); 
    $resourceLoader = new Zend_Loader_Autoloader_Resource(
      array(
       'basePath'  => APPLICATION_PATH, 
       'namespace'  => '', 
       'resourceTypes' => array(
       'model'   => array(
         'path'  => '../library/models/', 
         'namespace' => 'Model_' 
        ), 
       ), 
      ) 
    ); 
    return $resourceLoader; 
} 

それです。今度はあなたのモデルを次のようなコントローラで使うことができます:

$model = new Model_Table(); 
1

のZendオートローダローディングクラスを、それはそれでregistredです。 ライブラリがインクルードパスにある場合は、オートローダーのデフォルトネームスペースなどの「モデル」を簡単に登録して、クラスにModels_Actors_Actorなどの名前を付けることができます。

+0

いくつかのコードスニペットで説明できますか? –

2

あなたはすべてのモジュールに対して同じモデルを使用する場合は、アプリケーションフォルダのアプリケーション/モデル

にそれを置くことができ、それはちょうどあなたがモジュールなしでウェブを持っているときのように正常に動作します。

しかし、モデルをライブラリに入れたい場合、ライブラリパスに 'models'フォルダを置き、それを自動読み込みすることができます。

  1. すべてのTable.phpファイルを含むライブラリに 'Models'フォルダを作成します。 configs /のapplication.iniプット
  2. autoloaderNamespaces.models = "Models_" 
    

次にあなたがコントローラで、Webアプリケーション

に名前空間 'Models_' を使用することができますいずれかに

$model = new Models_Table(); 

を場合、パスアプリケーション/モデルのフォルダモデルを保持することをお勧めします

関連する問題