当我在控制器中执行forward()时,我丢失了route和route_parameters。
当我有ParentAction时,它会转发到ChildAction。在Childaction我做return $this->render('myTemplate.html.twig', array());
然后请求属性嵌套!
因此,当模板被渲染时,而不是$request['attributes']['_route_parameters']
,我得到$request['attributes']['request']['attributes']['_route_parameters']
。
虽然在ChildAction中,当我做$this->getRequest();
时,hierarchie是正常的。
这是一个错误,还是我做错了什么?
答案 0 :(得分:1)
原因是symfony并不假设你有相同的路线参数。 因此,当您转发时,您需要重新提供新路线所需的路线参数,即使它们是相同的。
(顺便提一下,您还必须为新路线提供任何查询参数。)
public function indexAction($param)
{
return $this->forward(
'AppBundle\\Controller\\DefaultController::otherAction',
array("someOtherParam" => $param),
$request->query->all() // Causes query string params to be copied
);
}
// This route has a different parameter.
public function otherAction($someOtherParam) ...
答案 1 :(得分:0)
可能的解决方案是在转发时将您的请求作为第二个参数传递。
$response = $this->forward('MyBundle:MyController:myAction', array('request' => $request));
此外,由于转发只是核心Symfony2功能的快捷方式,this可能有所帮助。
答案 2 :(得分:0)
在我的案例中,以下代码有所帮助:
$subRequest = $this->container->get('request')->duplicate(
array(),
null,
array('topicId' => $topicId,'_controller' => 'SomeBundle:Topic:close'));
return $this->container->get('http_kernel')
->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
“主题”是TopicController,“close”是closeAction