【问题标题】:How to access to a function of a controller from inside another controller in Symfony2?如何从 Symfony2 中的另一个控制器内部访问控制器的功能?
【发布时间】:2014-08-20 10:36:18
【问题描述】:

我想知道如何从 Symfony2 中的另一个控制器内部访问控制器的功能。事实上,我有两个控制器:“EventgroupeController”和“GroupeController”。在控制器“EventgroupeController”的代码中,我把指令放在下面:

return GroupeController::AfficheGroupeAction();

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

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

所以,我的问题是:我该如何解决这个问题以及如何从控制器“EventgroupeController”内部访问控制器“GroupeController”的函数 AfficheGroupeAction()?

【问题讨论】:

  • 这是AfficheGroupeAction静态方法吗??因为错误表明它不是。
  • 不,它不是静态方法,顺便说一下,这是函数 AfficheGroupeAction 的标题: public function AfficheGroupeAction(){ 你知道如何调用非静态方法吗?功能??
  • 为什么要在另一个控制器中调用它??如果您需要在此方法中执行某些操作,请将其移至服务,并在两个地方调用它
  • 好吧,我必须这样做,因为在验证表单后,将立即显示组的网页。因此,我必须在另一个控制器中调用控制器的函数在 Symfony2 中。
  • ok..搞定了,请看页面底部的答案

标签: function symfony controller


【解决方案1】:

动作方法不能是静态的。

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

应该工作!

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

【讨论】:

  • 好吧,我试过这个代码: return $this->get('controllerservice')->AfficheGroupeAction();但我收到此错误消息: FatalErrorException: Error: Call to a member function get() on a non-object in C:\wamp\www\Wkayet_project\PFESymfony2\vendor\symfony\symfony\src\Symfony\Bundle\FrameworkBundle\ Controller\Controller.php line 256 ...所以你可以注意到这里,它不起作用!!...顺便问一下,这里有什么问题?
  • 你的控制器扩展了 Symfony2 控制器类?
  • 是的,当然有,这是它的标题:class GroupeController extends Controller
  • 要不要我把控制器的所有代码都给你??
  • 如果您想获得帮助,请提供最大的信息 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-08
  • 2011-08-30
  • 2016-09-13
  • 1970-01-01
  • 2015-10-31
  • 2016-05-30
相关资源
最近更新 更多