18

私は Symfony を学んでおり、リポジトリを使用してサービスを作成しようとしています。generate:entity からリポジトリとエンティティを作成したので、問題ないはずです。

これまでのところ、services.yml で得たものは次のとおりです。

parameters:
    mytest.entity: TestTestBundle:Brand
    mytest.class:  Test\TestBundle\Entity\Brand
    default_repository.class: Doctrine\ORM\EntityRepository

services:
     myservice:
          class: %default_repository.class%
          factory-service: doctrine.orm.default_entity_manager
          factory-method: getRepository
          arguments:
            - %mytest.entity%

しかし、サービスを呼び出そうとすると、次のエラーが発生します。

Catchable Fatal Error: Argument 2 passed to Doctrine\ORM\EntityRepository::__construct() must be an instance of Doctrine\ORM\Mapping\ClassMetadata, none given, called in 

次に、エンティティを使用してサービスを作成しようとしました。私の services.yml は次のようになります。

services:
     myservice:
          class: %mytest.class%
          factory-service: doctrine.orm.default_entity_manager
          factory-method: getRepository
          arguments:
            - %mytest.entity%

しかし、これについては、次のようになります。

Error: Call to undefined method 
                Test\TestBundle\Entity\Brand::findAll

誰かが私が間違っていることを知っていますか?

ありがとう

4

7 に答える 7

24

KnpRadBundle で行った方法は次のとおりです: https://github.com/KnpLabs/KnpRadBundle/blob/develop/DependencyInjection/Definition/DoctrineRepositoryFactory.php#L9

最後に、次のようになります。

my_service:
    class: Doctrine\Common\Persistence\ObjectRepository
    factory_service: doctrine # this is an instance of Registry
    factory_method: getRepository
    arguments: [ %mytest.entity% ]

アップデート

2.4 以降、Doctrine ではデフォルトのリポジトリ ファクトリをオーバーライドできます。

symfony で実装する方法は次のとおりです: https://gist.github.com/docteurklein/9778800

于 2013-06-21T08:00:02.157 に答える
10

間違った YAML キーを使用した可能性があります。あなたの最初の構成は、私にとってはうまくいきます

  • factory-service の代わりに factory_service
  • factory-method の代わりに factory_method
于 2013-11-17T16:06:44.643 に答える