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 操作只会创建一个重定向) 或带有注入的服务实现只是一个简单的重定向
任何人都可以指导我如何完成跨控制器变量交换 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 操作只会创建一个重定向) 或带有注入的服务实现只是一个简单的重定向