2013-11-25 147 views
8

我已經安裝了Phpstorm的Symfony2插件,但我無法讓IDE看到這些現有的服務或其他注入的對象。這些可以以某種方式修復,所以警告消失了嗎?phpstorm symfony2缺少服務警告

enter image description here

+0

爲了完整地完成Symfony框架和其他註釋的完整代碼,您應該首先安裝Symfony插件,然後安裝PHP註釋,本文將顯示您應該在PHPSto rm代碼更快Symfony應用程序 http://refreshmymind.com/symfony-plugins-phpstorm/ –

回答

22

我也有類似的問題,並會建議您檢查一下下面...

  1. 由於@Marcel建議,請檢查您的Symfony2插件被打開...

    1.1。設置> Symfony2插件

    1.2。檢查路徑到這些目錄是正確的,由於某種原因,我有一個項目中的兩個symfony的項目,所以默認路徑是不準確的

Symfony2 plugin

  • 您應該再次檢查插件對您的容器XML的引用是否準確,默認情況下它將是「app \ cache \ dev \ appDevDebugProjectContainer.xml」,如您所見,我必須更新並且您可以看到路徑現在是「EXISTS 「,它說」錯誤「之前

    2.1。設置> Symfony2插件>容器

    2.2。enter image description here

  • 然後,按@伊戈爾的建議清除緩存

  • +0

    尼斯的答案,非常感謝;) – androidu

    +2

    設置路徑「app \ cache \ dev \ appDevDebugProjectContainer.xml」(爲空)幫助了我。謝謝! – Eddie

    +0

    我已經添加了一個指定YML服務定義過程的答案:) –

    0

    檢查以確保你的插件爲最新版本。我知道以前版本的插件沒有自動解析服務。

    否則,您可以添加以下告訴IDE哪些變量類型$exportHelper是:

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

    這將然後給你自動補全輸入類似「$exportHelper->」的時候。

    +0

    我有最新版本的symfony插件,我也使用註釋。 – androidu

    +0

    您可以通過點擊類名跳轉到該類來驗證名稱空間/類路徑是否正確。其他服務是否自動工作? – jayem

    +0

    只有使用註釋鍵入提示,我纔可以按Ctrl +點擊。我得到的警告只是因爲phpstorm的語法高亮。 – androidu

    1

    清除開發環境的緩存。如果服務真的存在,它應該修復它。導航到你的項目目錄中終端類型:

    app/console ca:c

    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> 
    

    +1

    如果我使用YAML(我)是什麼? – androidu

    +0

    @MarcelCăşvan:你做到了嗎? –

    +0

    @JavierCane我必須添加'/ * @ var $ varName VarType * /'doc塊並在變量聲明上面定義類型。 – androidu

    0

    這樣看來,我沒有讓我的Symfony2的插件,這是什麼原因相關的Symfony工作的。我認爲它在安裝後默認啓用。哦

    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