3

すぐに本番環境で使用を開始するため、Zend Framework について自分自身を文書化し始めました。モデルを使用して作業を開始するまで、すべてが正常に機能していました:)。

Zend の推奨に基づくモデルのデフォルトの場所はapplication/models/DbTable、すべてのモデルが投入される場所ですApplication_Model_DbTable_Actors。私にとって、これはモデルの非常に長い名前であり、使いやすいものではありません。

取得したいディレクトリ構造は次のようになります。

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

したがって、すべてのモデルはディレクトリの下に存在しますがmodels、独自のディレクトリにグループ化されます。

各クラスの命名は or にする必要がありますActorsMapper(どちらもorActorを拡張します)。Zend_Db_TableZend_Db_Row

私のコントローラーで、次のようなものを使用してモデルをインスタンス化すると$actors = new ActorsMapper()、 が得られるという事実を認識しFatal error: Class not foundています。そのため、これについてあなたの助けを求めています。

この問題を解決するために、自分のmodelsディレクトリを include_pathに追加しようとしました。

  • 初挑戦

    includePaths.models = APPLICATION_PATH "/models"application.ini に追加

しかし、これはそれをインクルードパスに追加することさえしません

  • 2回目の試行:

    を使用してパスを明示的に追加しましたset_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), realpath(APPLICATION_PATH . '/models'), get_include_path(), )));

ただし、これにより含まれているパスにそのパスが追加されても、エラーは引き続き発生します。

の公式ドキュメントでこのモデルの命名を見Zend_Db_Tableたことがありますが、自動ロードに関連するものは見つかりませんでした。

解決策をありがとうございました。

ps zend フレームワークのバージョンは 1.11.1 です

4

2 に答える 2

0

Zend_Application_Bootstrap_Bootstrap を拡張してみてください。これを試すことができます

$loader = $this->getResourceLoader();

$loader->addResourceType('books', 'models/books', 'Model_Book'); $loader->addResourceType('actors','models/actors','Model_Actor');

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

于 2011-03-19T03:22:26.567 に答える
0

Zend Framework にはオートローダーが組み込まれています。クラス名をディレクトリツリーにマッピングすることで機能するため、Application_Model_Actors_Actorにマッピングされます

Application\
 Models\
  Actors\
   Actor.php

残念ながら、これを変更することはできません。あなたが探している機能は名前空間ですが、まだ開発中の Zend Framework 2 でのみサポートされています (実際には主要な機能の 1 つです)。

于 2010-12-14T14:45:43.927 に答える