Symfony 在控制器之间调用函数

Symfony calling functions between controllers

任何人都可以指导我如何完成跨控制器变量交换 and/or 函数调用吗?

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

PageController 具有生成我的主页、关于和联系页面的操作。主页只有一个博客列表。

BlogController 具有所有 CRUD 相关功能 - 创建、删除等

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

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

要么直接使用转发方法

$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();

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

更新:

按照您的 post 我实现了服务但出现以下错误:

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

当我在服务声明中添加以下行时,这个问题得到了解决:

calls:
         - [ setContainer, [ @service_container ]]

虽然 答案是正确的,但我会推荐另一种方法以尽量减少依赖性:

只需为您的 Blog 功能创建一个路由,然后在您的 PageController 中使用 $this->redirectToRoute,这样操作将被简单地重定向到指定的路由,因此您没有转发 (尽管我认为forwad 操作只会创建一个重定向) 或带有注入的服务实现只是一个简单的重定向