2017-04-20 87 views
0

我在我的Symfony項目中使用了我的供應商文件夾中的一些自定義類。現在,我需要從我的parameters.yml它位於從供應商文件夾Symfony訪問parameters.yml

C:\xampp\htdocs\myproject\app\config\parameters.yml 

在我的正常Symfony的代碼訪問某些參數我只是做

$this->getParameter('myparameter'); 

和所有的設置,而不是在供應商的文件夾中。我想我需要導入一些命名空間,但無法找到哪些? 任何幫助,將不勝感激。謝謝。

UPD1這個問題是通過添加以下代碼AppBundle.php

class AppBundle extends Bundle 
{ 
private static $containerInstance = null; 

public function setContainer(\Symfony\Component\DependencyInjection\ContainerInterface $container = null) 
{ 
    parent::setContainer($container); 
    self::$containerInstance = $container; 
} 

public static function getContainer() 
{ 
    return self::$containerInstance; 
} 
} 

,然後調用從我的供應商代碼的容器解決了以下內容:

use AppBundle\AppBundle; 
AppBundle::getContainer()->getParameter('myparameter'); 

感謝大家幫幫我。

+0

[注入服務容器](http://stackoverflow.com/questions/) 12056178/how-to-access-service-container-in-symfony2-global-helper-function-service)並使用[' - > getParamter()'](http://symfony.com/doc/current/service_container/ parameters.html)? – kero

+0

我是否需要將其定義爲服務,或者使用Symfony \ Component \ DependencyInjection \ ContainerInterface作爲Container;足夠?順便說一句,這種方法不工作說未定義的屬性$容器 – Jack

+0

@傑克您的更新代碼正是**不**做。靜態從容器中獲取參數正在破壞容器的整個目的。供應商文件夾中的類現在將與AppBundle類和容器緊密耦合。請不要這樣做。實例化時,通過構造函數將所需參數注入類中。這就是依賴注入容器的用途。我的答案在下面解釋。 – daviomey

回答

0

DependencyInjection/YourBundleExtension.php

$container->setParameter('myparameter', $config); 

https://symfony.com/doc/current/create_framework/dependency_injection.html#main

之後,此配置添加到您的服務(例如)

資源/配置/服務。 yml

services: 
your.service: 
    class: App\YourBundle\Service\YourService 
    arguments: 
     - %myparameter% 
+0

是的,但我如何從位於C:\ xampp \ htdocs \ myproject \ vendor \ myotherclass \ myotherclass.php的類中訪問它?它對Symfony容器一無所知。 – Jack

+0

如果您將使用注入,它會知道有關容器。我認爲沒有其他的方法...你可以從你的類解析yml文件,但這是不正確的使用Symfony –

+0

http://symfony.com/doc/current/contributing/code/standards.html –

0

您可以在

  1. C:\xampp\htdocs\myproject\app\config\services.yml
  2. 定義你的業務的Resources\config目錄捆綁的。請參閱How to Load Service Configuration inside a Bundle

您只需給他們一個名稱,指定的類,然後列出類有當它被實例化擬注入的任何參數定義的服務。要引用參數parameters.yml您將參數的名稱包裝在%%中,如下所示。

services: 
    my_project.some_service: 
     class: Vendor\Class\Name\Here 
     arguments: ['%some.parameter.name%'] 

在場景99%你一定要注入依賴注入容器到自己的類。讓你的類取決於容器是不好的 - 讓他們依賴於你項目中的其他服務或者簡單的值,比如字符串,整數等。