如何从Symfony2中的另一个控制器内部访问控制器的功能?

时间:2014-08-20 10:36:19

标签: function symfony controller

我想知道如何从Symfony2中的另一个控制器内部访问控制器的功能。实际上我有两个控制器:" EventgroupeController"和#34; GroupeController"。在控制器的代码" EventgroupeController"我把说明放在下面:

return GroupeController::AfficheGroupeAction();

但是当我运行代码(或者说我正在开发的项目)时,它会在Symfony2中显示此错误消息:

ContextErrorException:运行时注意:非静态方法Ikproj \ GroupeBundle \ Controller \ GroupeController :: AfficheGroupeAction()不应该静态调用,假设$ C来自C:\ wamp \ www \ Wkayet_project \ PFESymfony2 \ src \中的不兼容上下文Ikproj \ GroupeBundle \ Controller \ EventgroupeController.php第104行

看了这个链接:How to access a different controller from inside a controller Symfony2,为了知道如何从Symfony2中的控制器内部访问不同的控制器,我修改了文件services.yml的内容,如下所示:

 parameters:
#    ikproj_groupe.example.class: Ikproj\GroupeBundle\Example

services:
#    ikproj_groupe.example:
#        class: %ikproj_groupe.example.class%
#        arguments: [@service_id, "plain_value", %parameter%]
     controllerservice:
         class: Ikproj\GroupeBundle\Controller\GroupeController

然后,我用下面的行代替了return GroupeController::AfficheGroupeAction();指令:

$yourController = $this->get('controllerservice');
$yourController1 = $yourController::AfficheGroupeAction();
return $yourController1;

但我仍然看到此错误消息:

ContextErrorException:运行时注意:非静态方法Ikproj \ GroupeBundle \ Controller \ GroupeController :: AfficheGroupeAction()不应该静态调用,假设$ C来自C:\ wamp \ www \ Wkayet_project \ PFESymfony2 \ src \中的不兼容上下文Ikproj \ GroupeBundle \ Controller \ EventgroupeController.php第106行

所以,我的问题是:如何解决这个问题以及如何访问控制器的功能AfficheGroupeAction()" GroupeController"从控制器内部" EventgroupeController"?

1 个答案:

答案 0 :(得分:0)

动作方法不能是静态的。

$this->get('controllerservice')->youMethod();  

应该工作!

但是有了良好的“应用程序设计”,除非您想要将控制器的请求转发给另一个控制器,否则您不应该有此需求(例如:向后兼容性)。在这种情况下,您可以使用symfony2基本控制器提供的 forward 方法。 (http://symfony.com/doc/current/book/controller.html