【问题标题】:Inject entity repository as dependency in Symfony在 Symfony 中注入实体存储库作为依赖项
【发布时间】:2017-06-28 12:47:51
【问题描述】:

我有一个 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-&gt;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.

【问题讨论】:

  • 首先,删除 ::class 部分,因为您已经给出了一个完全限定的类名。这只是一个猜测(我通常使用 yaml),但尝试将你的反斜杠加倍。供应商名称\\ShopBundle 等
  • 你说得对,我不需要 ::class,只需要将参数类型也更改为字符串,就可以了!谢谢!

标签: symfony


【解决方案1】:

你可以试试这样的:

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2012-12-23
      • 1970-01-01
      • 2023-03-23
      • 2010-11-27
      • 1970-01-01
      • 2021-05-21
      • 2020-09-28
      • 2010-10-19
      • 2017-12-11
      相关资源
      最近更新 更多