質問

私は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');

また、この種の実装をオブザーバーパターンで実装しようとしています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top