2014-04-07 62 views
0

我正在嘗試使用symfony2服務容器。但是當我構建每個服務時,我想使用我的控制器中定義的一些變量。我想知道這是否可能以及如何執行它。上述是不可能的。如何使用php變量來配置我的symfony2服務?

p.s:我正在使用yml服務定義。

$_ws['configurator'] = cmfGetInitObject(); //returns an instance of cmlObj 
$_ws['configurator']->setOptions(
array(
    'configurationsFolderPath' => realpath(dirname(__FILE__) . '/../configurations'), 
    'server' => &$_SERVER, 
    'legacyFormatEnabled' => true 
) 
); 
$_ws['packageManager'] =& $_ws['configurator']->packageManager; 
$_ws = $_ws['configurator']->load($_ws); //$_ws['configurator'] again resolves to a cmlObj 

這是包含我提到的配置的數組。

+1

控制器是請求範圍的。沒有定義的服務不是。如果你沒有在你的控制器中實現你的服務,你可能需要在你的請求中設置一個屬性。你的用例是什麼?你需要什麼樣的參數?沒有另一種方法來處理這個問題嗎? – Touki

+0

我試圖在已寫入的網站中將基於工廠的方法轉換爲服務容器方法。但是如果我可以將數組定義爲服務並通過某些函數傳遞它,則可以處理它。但是,一些其他類的函數/數組上的全局php代碼,我不知道是可能的還是不可能的。我從你所說的是不可能收集的。我該如何處理這個問題,並將屬性設置到我的請求中,以及如果它們不是請求範圍的,會影響服務嗎? – user2268997

+0

你能告訴我們一些代碼嗎? – Touki

回答

1

你不行。服務容器在請求流程開始時創建,而控制器幾乎在流程結束時執行。

如果您確實沒有在請求的容器構建階段訪問所需的配置,則可以使用setter來設置容器中的值,也可以在構建服務時使用默認值。

更好的辦法是將其移出控制器並在事件監聽器中。

+0

我不確定在容器構建階段沒有訪問所需的配置。您是否可以澄清一下在服務容器中可以做什麼和不可以做什麼? – user2268997

+0

@ user2268997容器構建階段是第一階段。你只能訪問Request對象,僅此而已。因此,如果您需要當前用戶,則無法在此階段執行此操作。 –

+0

謝謝,你能碰巧想到一個解決方法嗎? – user2268997

相關問題