phpstorm symfony2缺少服务警告

时间:2013-11-25 11:10:14

标签: symfony service dependency-injection phpstorm

我已经为Phpstorm安装了Symfony2插件,但我无法让IDE看到这些现有服务或其他注入对象。这些可以以某种方式修复,所以警告会消失吗?

enter image description here

6 个答案:

答案 0 :(得分:23)

我有类似的问题,建议仔细检查以下内容......

  1. 正如@Marcel建议的那样,检查你的Symfony2插件是否已开启......

    1.1。设置> Symfony2插件

    1.2。检查这些目录的路径是否正确,由于某种原因,我在项目中有两个symfony项目,因此默认路径不准确

  2. Symfony2 plugin

    1. 您应该仔细检查插件对容器XML的引用是否准确,默认情况下它将是“app \ cache \ dev \ appDevDebugProjectContainer.xml”,因为您可以看到我的必须更新,您可以看到路径现在是“EXISTS”,在

      之前说“ERROR”

      2.1。设置> Symfony2插件>容器

      2.2。 enter image description here

    2. 然后,根据@ Igor的建议清除你的缓存

答案 1 :(得分:3)

最后,感谢@googol帮助,我找到了一种在YML格式的自定义路径中指定服务定义文件的方法:

您只需创建或修改.idea/symfony2.xml文件,包括以下标记: xml <option name="containerFiles"> <list> <container_file path="custom/path/to/your/services_definition.yml" /> </list> </option>

你必须重启PhpStorm就是这样! :)

这里以完整的symfony2.xml文件为例:

xml <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="Symfony2PluginSettings"> <option name="pluginEnabled" value="true" /> <option name="twigAnnotateTemplate" value="false" /> <option name="twigAnnotateAsset" value="false" /> <option name="twigAnnotateAssetTags" value="false" /> <option name="twigAnnotateRoute" value="false" /> <option name="twigAnnotateTranslation" value="false" /> <option name="phpAnnotateTemplate" value="false" /> <option name="phpAnnotateService" value="false" /> <option name="phpAnnotateRoute" value="false" /> <option name="phpAnnotateTemplateAnnotation" value="false" /> <option name="phpAnnotateTranslation" value="false" /> <option name="phpHighlightServices" value="true" /> <option name="codeFoldingTwigRoute" value="false" /> <option name="codeFoldingTwigTemplate" value="false" /> <option name="codeFoldingTwigConstant" value="false" /> <option name="containerFiles"> <list> <container_file path="custom/path/to/your/services_definition.yml" /> </list> </option> </component> </project>

此处您有一个功能请求,以便包含通过插件UI设置添加此自定义路径服务定义的可能性,而不必手动编辑配置文件:https://github.com/Haehnchen/idea-php-symfony2-plugin/issues/573

答案 2 :(得分:1)

清除开发环境的缓存。如果服务确实存在,它应该修复它。导航到终端中的项目目录,然后键入:

app/console ca:c

答案 3 :(得分:0)

检查以确保您的插件是最新版本。我知道插件的过去版本没有自动解析服务。

否则,您可以添加以下内容以告知IDE变量类型$exportHelper是什么:

<?php

/* @var $exportHelper \Acme\Bundle\ExportBundle\Service\ExportService */
$exportHelper = $this->get('Acme.csv.service');

这会在输入类似“$exportHelper->”的内容时为您提供自动完成功能。

答案 4 :(得分:0)

如果服务是用XML而不是YAML定义的,那么自动完成就可以开箱即用,而无需使用@var注释。

您可以尝试使用此示例定义,以便在使用其中一个已定义的服务时为您提供自动填充。

<?xml version="1.0" encoding="UTF-8" ?>
<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="activityService" class="ActivityManager">
            <argument type="service" id="activityWriter"/>
        </service>
        <service id="activityWriter" class="DirectStatsActivityWriter">
        </service>
    </services>
</container>

答案 5 :(得分:0)

所以我似乎没有启用我的Symfony2插件,这就是Symfony相关工作的原因。我认为安装后默认启用它。好吧