1

私は新しいアプリケーションの開発を始めました。これは ZF2 で書かれた初めてのアプリケーションです。ZF1でDoctrine1でアプリを作った経験はありますが、ZF2とDoctrine2でアプリを作りたいと思っています。デフォルトのエンティティ フォルダーはモジュール ディレクトリにあります。アプリケーション全体で共有される 1 つのモデル フォルダーが必要です。したがって、次のようなアプリケーション構造を用意しました。

config
models
 generated
module
 Administration
 Application
public
vendor

データベース (MySQL) を設計し、Doctrine CLI を使用して XML 形式にインポートしました。モデルも作成しました。しかし今、私は問題を抱えています - 私のモジュールでそれをどのように使うのですか? 私はいくつかのコードを用意しました:

protected $em;

public function setEntityManager(EntityManager $em)
{
    $this->em = $em;
}

public function getEntityManager()
{
    if (null === $this->em) {
        $this->em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');
    }
    return $this->em;
}

public function indexAction()
{
    return new ViewModel(array(
        'carriers' => $this->getEntityManager()->getRepository('Carrier')->findAll()
    ));
}

「クラス キャリアが見つかりません」というエラーが表示されます。これはパスの問題ですが、私は ZF2 の初心者であり、設定方法がわかりません...

4

1 に答える 1

0

構成内でDoctrine 2のエンティティへのパスを定義します。ここで、次のような構成があると仮定します。

'doctrine' => array(
    'driver' => array(
        __NAMESPACE__ . '_driver' => array(
            'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
            'cache' => 'array',
            'paths' => array(__DIR__ . '/../src/' . __NAMESPACE__ . '/Entity')
        ),
        'orm_default' => array(
            'drivers' => array(
                __NAMESPACE__ . '\Entity' => __NAMESPACE__ . '_driver'
            )
        )
    )
)

基本的に、パスを正しくマップする必要があります。内で、orm_defaults各モジュールのドライバーを個別に定義するか、単にグローバル ドライバーを使用することができます。

その中__NAMESPACE__ . '_driver'で、指定された名前のドライバーを定義し、エンティティが格納される正確な場所も定義します。あなたの場合、これはおそらく次のようになります

'paths' => array(__DIR__ . '/../src/Administration/Entity')

または、エンティティが保存されているモジュールの名前は何でも。この場合Administration

さらに、常に次のように完全修飾リポジトリ名を割り当てます。

->getRepository('NAMESPACE\Entity\Carrier')
于 2012-11-19T15:48:06.137 に答える