41

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

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

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

4

3 回答 3

73

如果您不想将类定义为服务,因为我觉得这不是一个好习惯,@Qoop 引用了 Fabien 的话,您可以使用转发:

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;
}

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

于 2014-01-22T08:33:46.280 回答
46

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

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

services:
    your_service_name:
        class: YourCompany\YourBundle\Controller\YourController

然后在任何控制器中,您都可以通过容器获得此服务:

$yourController = $this->get('your_service_name');

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

于 2013-04-05T06:46:03.080 回答
0

您只需在您所在的控制器中实例化您想要访问的控制器。

您所在的控制器:

*在 symfony 2/3 中,您可能需要放置“YourBundle”而不是“App”

..

use App\Controller\DefaultController; 

..

public function index()
{

    $default_controller = new DefaultController;
    $variable = 1;
    $default_controller->actionToCall($variable);

    return $this->render('...'); //The view you want to render or call another action
}

在控制器中调用:

public function actionToCall($variable)
{
    //dd($variable);        
}

完毕。

于 2021-11-11T08:05:35.550 回答