Symfony在控制器之间调用函数

时间:2015-01-01 21:41:57

标签: symfony controller

有人可以指导我如何完成跨控制器变量交换和/或函数调用吗?

我是Symfony的新手,我有一个相当复杂的练习示例网站,它有两个控制器 - PageController和BlogController。

PageController有动作来生成我的家,关于和联系页面。主页上只有一个博客列表。

BlogController具有所有与CRUD相关的功能 - 创建,删除等

我的问题是我想从PageController调用我的BlogController:createAction函数,因此我可以在主页上的博客列表上方显示博客创建表单,或者只传递包含新博客表单数据的变量。

此外,我需要找到一个解决方案,允许表单提交,并通过AJAX刷新列表。

2 个答案:

答案 0 :(得分:1)

虽然@Tom Toms答案是正确的,但我建议采用另一种方法来减少依赖性:

只需为您的Blog功能创建路线,然后在PageController中使用$this->redirectToRoute,这样操作就会被简单地重定向到指定的路线,因此您没有转发(虽然我认为转发操作只会创建一个简单的重定向

,只会创建一个重定向的或服务实现

答案 1 :(得分:0)

使用forward method directy

$response = $this->forward('AcmeDemoBundle:Blog:myFunction', array(
    'name'  => $name,
));

http://symfony.com/doc/current/book/controller.html#forwarding-to-another-controller

或者,您可以将博客控制器定义为服务。

service.yml

services:
    your_service:
        class: Acme\DemoBundle\Controller\BlogController

然后你可以使用

$service = $this->get('your_service');
$service->myFunction();

您还可以考虑设置表单工厂服务(更先进一点)

<强>更新

在您发布帖子后,我实施了一项服务,但收到了以下错误:

Error: Call to a member function get() on a non-object

当我将以下行添加到服务声明中时,这已得到修复:

calls:
         - [ setContainer, [ @service_container ]]