相关疑难解决方法(0)

Symfony 2:从存储库创建服务

我正在学习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)

有人知道我做错了什么吗?

谢谢

service repository symfony doctrine-orm

17
推荐指数
3
解决办法
2万
查看次数

如何解决"检测到服务的循环引用"问题?

我正在尝试将我的存储库服务注入到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)

php symfony doctrine-orm

5
推荐指数
1
解决办法
8065
查看次数

标签 统计

doctrine-orm ×2

symfony ×2

php ×1

repository ×1

service ×1