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

chi*_*ain 38 php symfony

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

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

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

Sim*_*ity 67

如果您不想将该类定义为一个服务,因为它不觉得作为一个很好的做法,我和@Qoop引述法比安斯基说同样的,你可以使用转发:

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;
}
Run Code Online (Sandbox Code Playgroud)

如果您需要在模板中嵌入内部控制器操作的输出,Symfony文档也有相应的内容.


Vit*_*ian 41

您可以将控制器定义为服务,然后在另一个控制器中获取.

在您services.yml定义所需的控制器作为服务:

services:
    your_service_name:
        class: YourCompany\YourBundle\Controller\YourController
Run Code Online (Sandbox Code Playgroud)

然后在任何控制器中,您将能够通过容器获得此服务:

$yourController = $this->get('your_service_name');
Run Code Online (Sandbox Code Playgroud)

在文档中有一些关于控制器作为服务的有用信息

  • 这是最好的方法吗?或者还有另一种方法可以做到这一点 (3认同)
  • 不建议使用作为控制器的服务,至少不是由Febien提供 - 请参阅:https://github.com/symfony/symfony-docs/issues/457 (2认同)