2016-12-15 4 views
0

Lorsque j'ouvre le services.xml à PhpStorm avec Symfony Plugin activé, il est en mesure de résoudre tous les services, je peux Ctrl + Clic et passez la définition du service, à l'exception doctrine.orm.entity_manager.PhpStorm incapable de résoudre le symbole « doctrine.orm.entity_manager »

Il dit incapable de résoudre le symbole 'doctrine.orm.entity_manager'

Voici le fichier services.xml

<?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> 

PhpStorm Détails:

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 

fichier appDevDebugProjectContainer.xml existe dans le répertoire app/cache.

Comment puis-je obtenir ce fonctionnement?

+0

Cela doit être un problème avec le plugin Symfony car il est celui qui fournit une telle navigation/résolution - PhpStorm utilise juste cette info lorsque vous effectuez votre action Ctrl + Click. Essayez de vérifier les problèmes existants dans le module de suivi des problèmes du plugin: https://github.com/Haehnchen/idea-php-symfony2-plugin/issues?utf8=%E2%9C%93&q=is%3Aissue%20doctrine.orm.entity_manager%20 – LazyOne

Répondre

0

J'ai le même problème. Si vous ouvrez le fichier vendor\doctrine\doctrine-bundle\Resources\config\orm.xml où sont définis les services de doctrine, vous pouvez voir, il n'y a pas de service avec l'id « doctrine.orm.entity_manager » mais seulement « doctrine.orm.entity_manager.abstract »

La définition ressemble à:

<service id="doctrine.orm.entity_manager.abstract" class="%doctrine.orm.entity_manager.class%" abstract="true" /> 

Comme vous peut voir l'attribut abstrait est défini sur true. Cela signifie que ce service peut servir de parent d'autres services, et lorsque vous définissez des services enfants avec ce parent abstrait, vous n'avez pas besoin de définir les appels de méthode ou les paramètres injectés dans le constructeur, par exemple, ces définitions seront héritées de le parent.

Si vous enquêtez sur un peu plus vous constaterez que %doctrine.orm.entity_manager.class% est défini dans le même fichier en tant que paramètre qui en fait des références à la doctrine Entity Manager:

<parameter key="doctrine.orm.entity_manager.class">Doctrine\ORM\EntityManager</parameter> 

donc je suppose que nous devrions utiliser doctrine.orm.entity_manager.abstract, mais doctrine.orm.entity_manager est reconnu aussi, bien que je ne sais pas comment.

Pour plus d'explications des définitions de service abstraites ont un regard sur cette page doc Symfony: https://symfony.com/doc/current/service_container/parent_services.html