有人可以指导我如何完成跨控制器变量交换和/或函数调用吗?
我是Symfony的新手,我有一个相当复杂的练习示例网站,它有两个控制器 - PageController和BlogController。
PageController有动作来生成我的家,关于和联系页面。主页上只有一个博客列表。
BlogController具有所有与CRUD相关的功能 - 创建,删除等
我的问题是我想从PageController调用我的BlogController:createAction函数,因此我可以在主页上的博客列表上方显示博客创建表单,或者只传递包含新博客表单数据的变量。
此外,我需要找到一个解决方案,允许表单提交,并通过AJAX刷新列表。
答案 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 ]]