当我在启用了Symfony Plugin的PhpStorm中打开services.xml时,它可以解析所有服务,我可以 Ctrl +单击并转到服务定义,但{{1 }}
它说无法解析符号'doctrine.orm.entity_manager'
这是services.xml文件
doctrine.orm.entity_manager
PhpStorm详细信息:
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="example_manager" class="Vendor\XysBundle\Manager\ExampleManager">
<argument type="service" id="doctrine.orm.entity_manager" />
</service>
</services>
</container>
app / cache目录中存在 PhpStorm 2016.3.1
Build #PS-163.9735.1, built on December 6, 2016
JRE: 1.8.0_112-release-408-b2 amd64
JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.o
文件。
我怎样才能让这个工作?
答案 0 :(得分:1)
我有同样的问题。如果您打开定义了doctrine服务的vendor\doctrine\doctrine-bundle\Resources\config\orm.xml
文件,您可以看到,没有ID为“doctrine.orm.entity_manager
”的服务,但只有“doctrine.orm.entity_manager.abstract
”
定义如下:
<service id="doctrine.orm.entity_manager.abstract" class="%doctrine.orm.entity_manager.class%" abstract="true" />
如您所见,abstract属性设置为true。这意味着此服务可以充当其他服务的父服务,并且当您使用此抽象父级定义子服务时,您不必定义方法调用或注入构造函数的参数,例如,这些定义将继承自父母。
如果您进行更深入的研究,您会发现%doctrine.orm.entity_manager.class%
在与实际引用Doctrine Entity Manager的参数相同的文件中定义:
<parameter key="doctrine.orm.entity_manager.class">Doctrine\ORM\EntityManager</parameter>
所以我想我们应该使用doctrine.orm.entity_manager.abstract
,但doctrine.orm.entity_manager
也会被识别,虽然我不知道如何。
有关抽象服务定义的进一步说明,请查看此Symfony文档页面:https://symfony.com/doc/current/service_container/parent_services.html