如何从控制器Symfony2内部访问不同的控制器

时间:2013-04-05 06:34:41

标签: php symfony

我需要从另一个控制器内的不同控制器访问一个方法。我该怎么做?我可以使用this->get方法吗?

我可以将控制器包含在当前控制器中并创建它的对象并通过对象访问该方法吗?这样做是否“好”?

我想调用form方法---另一个控制器的newAction。

2 个答案:

答案 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的一些有用信息