1

doctrine2 をアピジリティ プロジェクトに統合することに成功しました。DoctrineResource を拡張するようにコントローラーをセットアップしましたが、$this->getObjectManager() でエンティティーマネージャーを取得しようとすると、NULL が返されます。

エンティティマネージャーをサービスマネージャーから呼び出すと機能しますが、doctrineResources のフェッチ、作成などの親メソッドを使用したい場合は、DoctrineModule\Stdlib\Hydrator (および他のサービス) が最初のパラメーターとしてエンティティマネージャーを expexts するため、クラッシュしますが、 NULL を受け取ります

特性 trait ProvidesObjectManager のこのメソッド (getObjectManager()) が NULL を返す理由。他のプロジェクトでは機能していました。ここで私はゼロから始めて、問題を見つけることができません

4

2 に答える 2

0

$objectManagerカスタム (拡張)DoctrineResourceリスナーに挿入されることはないようです。

通常、ドクトリンObjectManager/EntityManagerは、 を介してリスナーに注入されDoctrineResourceFactoryます。これは、工場の 113 行目で確認できます。

ファクトリがリソース リスナーを正しく構築しているかどうかを確認する必要があります。たぶん、工場を正しく登録していないか、そのようなものです。しかし、コードがなければ、問題が正確にどこで発生しているのかを特定するのは困難です。

于 2014-08-21T15:20:04.210 に答える
0

DoctrineResourceFactoryObjectManager彼が作成したリソースにのみ注入します。

Your code Who create the TestResourceis theTestResourceFactoryでは、このファイルhttps://bitbucket.org/rump_shaker/test/src/800e79f5e9eef1cbb133bdd467b711e039660ed7/module/Api/config/module.config.php?at=masterの 28 行目にこれが表示されます。

問題を解決する 1 つの方法は、次のようなコードを .xml ファイルに記述して、リソースに ObjectManager を挿入することですTestResourceFactory

<?php
namespace Api\V1\Rest\Test;

class TestResourceFactory
{
    public function __invoke($sm)
    {
        $config        = $sm->get('Config');
        $objectManager = $sm->get($config['object_manager']);
        $resource      = new TestResource();
        $resource->setObjectManager($objectManager); 
        return $resource;
    }
}

もう 1 つの方法は、リソースをインスタンス化するために zf-apigility-doctrine を構成する方法を確認することです。

Doctrine ORM Module to Zend Framework 2 のみを使用して API を doctrine で記述します。

zf-apigility-doctrine のアイデアは、別のツールと統合されています。この YouTube ビデオhttp://www.youtube.com/watch?v=5apFQF3VE3M&t=5m30sを参照してください。

于 2014-08-29T22:24:08.547 に答える