2014-05-19 36 views
1

我想用一個ResultFactory類的服務在我的Symfony 2的應用程序:Symfony的工廠類

我的結果工廠類將負責創建BaseResult實例。 根據傳遞給get factory方法的類型,ResultFactory將創建正確的ResultObject。

這裏的可能是什麼代碼:

class ResultFactory 
{ 

    protected $translator; 

    public function __construct(Translator $translator) 
    { 
     $this->translator = $translator; 
    } 

    public function get($type, $param) 
    { 
     $instance = null; 

     switch ($type) { 

      case 'Type1': 
       $instance = new Type1Result($param); 
       break; 

      case 'Type2': 
       $instance = new Type2Result($param); 
       break; 

     } 

     return $instance; 
    } 
} 

我的問題是:

我想在我的ResultObject使用服務。我如何將此服務注入到我的ResultObject中?

謝謝!

+0

能否請您澄清一下,在返回之前如何將該服務注入resultobject? setter-或contructur-injection ...? '$ instance-> setService($ service)'或'new Instance($ service,$ param)'?目前還不清楚你想要什麼,因爲看起來你已經注入了翻譯服務......爲什麼不把你想要注入的服務作爲工廠的附加參數傳遞給returnobject? – nifr

+0

我不知道我想用哪種方式注入服務。我只是想能夠使用一些服務到我的結果類。我不確定這是否是正確的方法,將它作爲參數傳遞給實例構造函數,並將其存儲在我的基類中。謝謝! – user3544352

回答

1

您沒有在結果對象中使用您的服務。您的工廠正在生成結果對象。 您可以在包的services.yml定義你的工廠的服務爲:

result.factory: 
    class: ResultFactory 
    arguments: ["@translator"] 

而在你的控制器,你可以調用服務:

$resultObject = $this->get('result_factory')->get($type, $param); 

你也需要核心例如如何建立工廠服務在[文檔]中使用symfony2。(http://symfony.com/doc/current/components/dependency_injection/factories.html