2012-02-13 103 views
2

我試圖做類似以下問題:Symfony2中設置控制器在kernelControllerEvent使用包:控制器:動作符號

Trying to swap a controller using an event listener with Symfony2

然而,當我使用的代碼(如建議在回答) :

$event->setController('MyMainBundle:Manage:show'); 

我剛剛得到一個錯誤:

LogicException: The controller must be a callable (MyMainBundle:Manage:show given). 

有沒有辦法在setController中使用Bundle:Controller:Method語法?或者,也許我可以調用一些其他方法來解決這個問題「可調用」?

回答

5

你應該給$event->setController是一個可調用的。 您給出了一個表示可調用的邏輯路徑的字符串。

您可以使用symfony的ControllerResolver來解析此字符串。

你必須注入在你的聽衆的controller_resolver服務,然後使用它像這樣:

$request = new Symfony\Component\HttpFoundation\Request(); 
$request->attributes->set('_controller', 'MyMainBundle:Manage:show')); 
$event->setController($this->resolver->getController($request)); 

但你顯然在這裏做框架的工作。

+0

當你說我在這裏完成框架的工作時,你是否建議採用這種方法?有沒有更好的方法可以推薦? – Matt 2012-02-13 21:45:32

+0

另外,我想要'Symfony \ Component \ HttpKernel \ Controller \ ControllerResolver'或'Symfony \ Bundle \ FrameworkBundle \ Controller \ ControllerResolver'嗎? – Matt 2012-02-13 21:51:36

+0

另外,從現在開始標記爲正確的,但我很好奇我問的問題。 – Matt 2012-02-13 22:28:52