在Symfony中将实体存储库注入为依赖项

时间:2017-06-28 12:47:52

标签: symfony

我有一个Symfony项目,我希望将实体存储库注入服务。服务定义是XML格式。

        <service id="vendorname_shop.checkout_data_manager" class="Vendorname\ShopBundle\Checkout\CheckoutDataManager">
            <argument type="service" id="security.token_storage" />
            <argument type="service" id="session" />
            <argument type="service" id="vendorname_shop.repository.pickup_point" />
            <argument type="service" id="vendorname_shop.repository.order_payment_method" />
            <argument type="service" id="vendorname_shop.repository.billing_address" />
        </service>

我想让vendorname_shop.repository.billing_address服务成为一个简单的实体存储库(不是我写的自定义类,而是

的结果)

EntityManager->getRepository(Vendorname\ShopBundle\Entity\BillingAddress::class)

方法调用),所以我在xml中使用了工厂语法,但是当Symfony试图评估参数时,我不断收到错误消息:

        <service id="vendorname_shop.repository.billing_address" class="Doctrine\ORM\EntityRepository">
            <factory service="doctrine.orm.entity_manager" method="getRepository" />
            <argument type="expression">Vendorname\ShopBundle\Entity\BillingAddress::class</argument>
        </service>

上面的代码为我提供了Unexpected character "\" around position 11.

2 个答案:

答案 0 :(得分:0)

您可以尝试这样的事情:

services:
    my_service_name:
        class: AppBundle\Controller\MyServiceName
        arguments: ["@=service('doctrine.orm.entity_manager').getRepository('AppBundle:MyEntity')"]

然后,您已为存储库构建服务。

public function __construct(MyEntityRepository $repository) {
    $this->repository = $repository;
}

但我认为还有很多可能性。

http://www.zuellich.de/blog/2016/03/symfony-3-inject-entity-repository-into-service-controller.html

这是另一种解决方案。我已经用一些解决方案替换了我的答案,它更好一些。

答案 1 :(得分:0)

正如Cerad所说,如果我使用完全限定名称,::class完全没用! 另外,将参数类型更改为字符串解决了问题!

<argument type="string">Vendorname\ShopBundle\Entity\BillingAddresss</argument>