我有一个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.
答案 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>