2014-02-14 39 views
1

我在我的Simfony2控制器的方法中調用服務。Symfony2 - 從服務中調用靜態屬性

沒問題,它工作正常。

function getFilterListBrandAction($brand_id = 0, $url_params = array()){ 
$b = $this->get('brand.service'); 
return $this->render('BundleMybundle:Page:page.html.twig', array(
      'param1' => $b->getParam(), 
      'do_not_change' => $b::$filter_accepted['brand'] 
     ));  
    } 

故障到達時,我試圖調用與先前實例化的服務的靜態屬性$b::$filter_accepted['brand']。相反,我對其他方法$b->getParam()沒有問題。

有一種方法可以從服務中調用靜態屬性/方法?

+0

你看到任何錯誤訊息? –

+0

並且顯示'var_dump($ filter_accepted ['brand'])'這個數組的結果,請 –

+0

我認爲這是一個總體上不好的想法。如果$ filter_accepted ['brand']'返回一些意想不到的值? Sory,但我不記得是否在文檔中看到過這樣的結構。也許你的目標有可能實現其他方式?就像通過在'brand.service'中添加'checkChangeStatus($ brand)'方法一樣。你可以在這個方法中做一些邏輯並返回值。 – NHG

回答

2

是的,可以從服務訪問公共屬性。

這個工作對我來說:

您的服務:

/** 
* Your Service 
*/ 
class YourService 
{ 
    public static $filter_accepted = array('brand' => 'my brand'); 
} 

控制器

class YourController extends ContainerAware 
{ 
    public function myAction() 
    { 
     $service = $this->container->get('acme.my_service'); 

     var_dump($service::$filter_accepted); 
     // Returns: array(1) { ["brand"]=> string(8) "my brand" } 

     var_dump($service::$filter_accepted['brand']); 
     // Returns: string(8) "my brand" 
    } 
} 
+1

然後你沒有正確的服務。發佈你的服務代碼和你聲明的config.yml文件。再次,這應該工作,因爲我自己嘗試。祝你好運! – Mick

+1

非常感謝。我很愚蠢。我在尋找錯誤的服務!再次感謝你! :) –