我想知道如何从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"?
答案 0 :(得分:0)
动作方法不能是静态的。
$this->get('controllerservice')->youMethod();
应该工作!
但是有了良好的“应用程序设计”,除非您想要将控制器的请求转发给另一个控制器,否则您不应该有此需求(例如:向后兼容性)。在这种情况下,您可以使用symfony2基本控制器提供的 forward 方法。 (http://symfony.com/doc/current/book/controller.html)