我需要从另一个控制器内的不同控制器访问一个方法。我该怎么做?我可以使用this->get
方法吗?
我可以将控制器包含在当前控制器中并创建它的对象并通过对象访问该方法吗?这样做是否“好”?
我想调用form方法---另一个控制器的newAction。
答案 0 :(得分:64)
如果您不想将课程定义为服务,因为它对我和@Qoop引用Fabien saying the same并不是一个好习惯,您可以使用转发:
http://symfony.com/doc/current/controller/forwarding.html
public function indexAction($name)
{
$response = $this->forward('AcmeHelloBundle:Hello:fancy', array(
'name' => $name,
'color' => 'green',
));
// ... further modify the response or return it directly
return $response;
}
如果您需要在模板中嵌入内部控制器操作的输出,documentation for Symfony也有一些功能。
答案 1 :(得分:40)
您可以将控制器定义为服务,然后在另一个控制器中获取。
在services.yml
将所需控制器定义为服务:
services:
your_service_name:
class: YourCompany\YourBundle\Controller\YourController
然后在任何控制器中,您都可以通过容器获得此服务:
$yourController = $this->get('your_service_name');
有关文档
中Controllers as Services的一些有用信息