我已经为Phpstorm安装了Symfony2插件,但我无法让IDE看到这些现有服务或其他注入对象。这些可以以某种方式修复,所以警告会消失吗?
答案 0 :(得分:23)
我有类似的问题,建议仔细检查以下内容......
正如@Marcel建议的那样,检查你的Symfony2插件是否已开启......
1.1。设置> Symfony2插件
1.2。检查这些目录的路径是否正确,由于某种原因,我在项目中有两个symfony项目,因此默认路径不准确
您应该仔细检查插件对容器XML的引用是否准确,默认情况下它将是“app \ cache \ dev \ appDevDebugProjectContainer.xml”,因为您可以看到我的必须更新,您可以看到路径现在是“EXISTS”,在
之前说“ERROR”2.1。设置> Symfony2插件>容器
2.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相关工作的原因。我认为安装后默认启用它。好吧