Symfony 3:无法覆盖存储库

时间:2016-05-17 13:09:41

标签: php dependency-injection symfony

升级从Symfony 2.7到3.0 。它几乎可以工作。只有问题:我无法在下面的代码中覆盖AppBundle\Entity\MyRepository,甚至不需要该文件(我将其重命名为测试版)和被Symfony跳过了。

应用/配置/ services.yml

# old, 2.7 (worked):
myRepositoryService:
  class: AppBundle\Entity\MyRepository
  factory_service: doctrine.orm.entity_manager
  factory_method: getRepository
  arguments: [AppBundle\Entity\MyEntity]

# new, 3.0 (skips the MyRepository):
myRepositoryService:
  class: AppBundle\Entity\MyRepository
  factory: ['@doctrine.orm.entity_manager', 'getRepository']
  arguments: ['AppBundle\Entity\MyEntity']

的appbundle \实体\ MyRepository

class MyRepository extends EntityRepository {
    public function findAll() {
        die("MyRepository->findAll()"); // not executed
    }
}

的appbundle \控制器\ MyController.php

$myItems = $this->get('myRepositoryService')->findAll(); // should die but doesn't

我是否错误配置了 services.yml ,以便Symfony为实体创建临时存储库文件而不是使用我创建的文件?

提前致谢!

1 个答案:

答案 0 :(得分:2)

以下代码在Symfony 3.0中为我工作:

some_repository:
    class: AppBundle\Repository\SomeRepository 
    factory: ['@doctrine.orm.default_entity_manager', getRepository]
    arguments: [AppBundle:SomeEntity]

请注意与您的工厂服务名称不同,并且工厂方法和实体名称没有单引号。

正如我在评论中提到的那样,应该在实体的映射中设置repositoryClass