我正在学习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%
Run Code Online (Sandbox Code Playgroud)
但是当我尝试调用该服务时,我收到此错误:
Catchable Fatal Error: Argument 2 passed to Doctrine\ORM\EntityRepository::__construct() must be an instance of Doctrine\ORM\Mapping\ClassMetadata, none given, called in
Run Code Online (Sandbox Code Playgroud)
然后我尝试使用实体创建服务.我的services.yml看起来像:
services:
myservice:
class: %mytest.class%
factory-service: doctrine.orm.default_entity_manager
factory-method: getRepository
arguments:
- %mytest.entity%
Run Code Online (Sandbox Code Playgroud)
但为此,我得到:
Error: Call to undefined method
Test\TestBundle\Entity\Brand::findAll
Run Code Online (Sandbox Code Playgroud)
有人知道我做错了什么吗?
谢谢
我正在尝试将我的存储库服务注入到EventListener中,但这导致我发现异常,这是因为我对Symfony2的基本知识,我不知道如何解决.例外情况是:
bootstrap.php.cache第2129行中的ServiceCircularReferenceException:
检测到服务"doctrine.orm.default_entity_manager"的循环引用,路径:"doctrine.orm.default_entity_manager - > doctrine.dbal.default_connection - > person.connect.listener - > tag.repository.service".
这是我如何声明存储库和监听器:
tag.repository.service:
class: Application\Bundle\PersonBundle\Entity\TagRepository
factory: ["@doctrine", getRepository]
arguments: [ Application\Bundle\PersonBundle\Entity\Tag ]
person.connect.listener:
class: Application\Bundle\PersonBundle\EventListener\ConnectListener
arguments:
tokenStorage: "@security.token_storage"
tagRepo: "@tag.repository.service"
tags:
- { name: doctrine.event_listener, event: postPersist, connection: default }
Run Code Online (Sandbox Code Playgroud)
我能找到的大多数答案建议注入服务容器,但我真的不想这样做.有没有办法妥善解决这个问题?
UPD:这是监听器的代码.在我尝试注入TagRepository之前,一切正常
class ConnectListener
{
/**
* @var TokenStorage
*/
private $tokenStorage;
/**
* @var TagRepository
*/
private $tagRepo;
/**
* @param TokenStorage $tokenStorage
* @param TagRepository $tagRepo
*/
public function __construct(TokenStorage $tokenStorage, TagRepository $tagRepo)
{
$this->tokenStorage = $tokenStorage; …Run Code Online (Sandbox Code Playgroud)