Symfony 如何将存储库注入服务

Symfony 如何将存储库注入服务,symfony,Symfony,我想将存储库注入到服务中。我的第一步是将存储库定义为服务,如: <service id="app.repository.user" class="AppBundle\Entity\UserRepository"> <factory class="doctrine" method="getRepository" /> <argument>AppBundle:User</argument> </service>

我想将存储库注入到服务中。我的第一步是将存储库定义为服务,如:

<service id="app.repository.user" class="AppBundle\Entity\UserRepository">
        <factory class="doctrine" method="getRepository" />
        <argument>AppBundle:User</argument>
</service>
我记得这在以前的版本中是有效的,有人对我有相同的问题和提示吗

我用的是Symfony 3.01

更新: 我解决我的问题。我错误地定义了一个类而不是一个服务,现在它可以工作了

<factory service="doctrine" method="getRepository" />

自2017年以来,Symfony 3.3+实现这一点非常简单

查看我的帖子了解更多一般性描述

您只需要创建自己的存储库作为服务

1.创建自己的存储库,而不直接依赖于条令 3.将存储库注入任何服务或控制器现在都很容易
另一个想法是使用into服务配置

<service id="app.registration_handler" class="AppBundle\Utils\RegistrationHandler">
        <argument type="service" id="security.password_encoder" />
        <argument type="expression">service('doctrine').getRepository('AppBundle:User')</argument>
</service>

服务('doctrine').getRepository('AppBundle:User'))

不确定,为什么有人会否决这个。。。如果有人偶然发现了相同的答案,请自己添加答案;)@JovanPerovic在我看来,这个问题(以及相对的答案)对于SO社区来说是非常无用的,因为这是一个简单的用户错误(由分心引起)。Symfony的文档清楚地解释了如何将“某物”注入服务。是的,但是
原则
存储库是一种特殊情况,因为您需要使用工厂。然而,关于用户错误和有用性,您是对的。。。
<factory service="doctrine" method="getRepository" />
<?php

namespace AppBundle\Repository;

use Doctrine\ORM\EntityManagerInterface;

class UserRepository
{
    private $repository;

    public function __construct(EntityManagerInterface $entityManager)
    {
        $this->repository = $entityManager->getRepository(User::class);
    }

    // add desired methods here
    public function findAll()
    {
        return $this->repository->findAll();
    }
}
# app/config/services.yml
services:
    _defaults:
        autowire: true

    AppBundle\:
        resource: ../../src/AppBundle
<?php

namespace AppBundle\Controller;

use AppBundle\Repository\UserRepository;    

class MyController
{
    /**
     * @var UserRepository
     */
    private $userRepository;

    public function __construct(UserRepository $userRepository)
    {
        $this->userRepository = userRepository
    }
}
<service id="app.registration_handler" class="AppBundle\Utils\RegistrationHandler">
        <argument type="service" id="security.password_encoder" />
        <argument type="expression">service('doctrine').getRepository('AppBundle:User')</argument>
</service>