Zend Frameworkモデルの場所と自動装置
-
09-10-2019 - |
質問
私はZend Frameworkについて自分自身を文書化し始めました。すぐに制作で使用を開始します。モデルを使用して作業し始めるまで、すべてが正常に機能していました:)。
Zendの推奨に基づいたモデルのデフォルトの場所は、 application/models/DbTable
, 、すべてのモデルが投入される場所です。この場所では、 Application_Model_DbTable_Actors
. 。私にとって、これはモデルの非常に長い名前であり、使いやすいものではありません。
私が取得したいディレクトリ構造は次のように見えます:
application/
models/
actors/
ActorsMapper.php
Actor.php
books/
BooksMapper.php
Book.php
等
したがって、私のモデルはすべて下にあります models
ディレクトリですが、独自のディレクトリにグループ化されています。
各クラスの命名はあるべきです ActorsMapper
また Actor
(どちらも拡張します Zend_Db_Table
また Zend_Db_Row
).
私は、私のコントローラーで、次のようなものを使用してモデルをインスタンス化するかどうかを知っています $actors = new ActorsMapper()
私は取得します Fatal error: Class not found
そして、なぜ私はこれについてあなたの助けを求めています。
この問題を解決するために、私は私を追加しようとしました models
include_pathへのディレクトリ:
初挑戦
追加した
includePaths.models = APPLICATION_PATH "/models"
Application.iniに
しかし、これはインクルードパスにそれを追加することさえありません
二度目の試み:
使用してパスを明示的に追加しました
set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/models'), get_include_path(), )));
しかし、これが含まれているパスの間にそのパスを追加しても、エラーは引き続き持続します。
このモデルの命名を見てきました 公式文書 の Zend_Db_Table
, 、しかし、私はそれらをオートロードすることに関連するものを見つけることができませんでした。
どんな解決策もありがとうございました。
PS Zend Frameworkバージョンは1.11.1です
解決
Zend Frameworkには、Autoloaderにビルドがあります。クラス名をディレクトリツリーにマッピングすることで機能するため、 Application_Model_Actors_Actor
にマッピングされます
Application\
Models\
Actors\
Actor.php
残念ながら、これを変更することはできません。あなたが探している機能はです 名前のペーシング しかし、それはまだ開発中のZend Framework 2のサポートされています(そして実際には主要な機能の1つです)。
他のヒント
zend_application_bootstrap_bootstrapを拡張してみてください。
$ roader = $ this-> getResourceloAder();
$ loader-> addResourceType( 'books'、 'models/books'、 'model_book'); $ loader-> addResourceType( 'Actors'、 'Models/Actors'、 'model_actor');
また、この種の実装をオブザーバーパターンで実装しようとしています。