Php Symfony 2-从另一个控制器调用控制器

Php Symfony 2-从另一个控制器调用控制器,php,symfony,controller,Php,Symfony,Controller,我想在我的控制器中使用另一个捆绑包中的控制器方法 这个->转发的方法需要一个响应对象,我不知道如何使用它 public function indexAction($name) { $response = $this->forward('AcmeHelloBundle:Hello:fancy', array( 'name' => $name, 'color' => 'green', )); // ... further modify the response

我想在我的控制器中使用另一个捆绑包中的控制器方法

这个->转发的方法需要一个响应对象,我不知道如何使用它

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

我看到我可以使用服务,但我想知道这是最好的解决方案还是另一种解决方案。

$this->forward
按以下顺序获取参数:

  • 字符串格式的控制器操作的逻辑名称,即“AcmeHelloBundle:Hello:fancy”
  • 以数组格式(即数组)作为请求变量传递的参数( “name”=>$name, “颜色”=>“绿色”, )

  • 可以使用请求访问功能在控制器中访问这些参数。

    有时,您希望完全绕过安全性,并在另一个控制器中运行命令,而不管用户的权限级别如何。幸运的是,你可以很容易地做到这一点

    首先,在要使用数据的控制器顶部为控制器运行use命令:

    use AppBundle\Controller\MySourceDataController;
    
    然后从目标控制器内调用该函数:

    $response = MySourceDataController::getTheData( $option1, $option2 );
    
    如果需要传递请求对象,可以通过以下方式进行传递:

    $response = MySourceDataController::getTheData( new Request( array(
        'server' => 'USAServer1',
    ) ), $option2 );
    
    这将返回一个带有设置参数server的请求。我还定义了$option2,这是一个经常在URL中定义的变量,例如:

    * @Route("/mydata/{server}/", name="api-source-data")
    * @param Request $request
    * @param         $server
    
    最后,如果要在该控制器中传递JSON并希望将其转换回对象,则可以在$response上运行以下代码:

    if ( 0 === strpos( $response->headers->get( 'Content-Type' ), 'application/json' ) ) {
        $response = json_decode( $response->getContent(), true );
    }
    

    瞧。从任何其他控制器访问任何控制器,并绕过源控制器的安全符号。:)

    它干净吗?对我来说,这感觉既自然又乏味。我是一个symfony初学者,我不知道我是否应该/可以在生产中使用它。