使用Symfony 3.4
我有这个表单,用户选择一种颜色,当您提交表单时,我转发提交给控制器的数据,而不是重定向到路由:
public function selectColorAction(Request $request)
{
$form = $this->createForm(pickColorType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
$data = $form["color"]->getData();
$getColorId = $data->getId();
$response = $this->forward('AppBundle:Products:selectPaint',
array(
'color'=>$getColorId,
));
return $response;
}
}
这是接收从上一个表单提交的数据的控制器:
public function selectPaintAction($color, Request $request)
{
$form = $this->createForm(BrandNameType::class);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid())
{
//something
}
return $this->render('AppBundle:Color:enter-brand-name.html.twig',
array(
'form'=> $form->createView()
)
);
}
问题是我的转发不仅发送数据,还发送第一个表单,导致错误。探查器显示两种形式:PickColor和BrandName表单。转发后我只想要BrandName。我能做什么?
如果你进一步了解forward方法的作用:
protected function forward($controller, array $path = array(), array $query = array())
{
$request = $this->container->get('request_stack')->getCurrentRequest();
$path['_forwarded'] = $request->attributes;
$path['_controller'] = $controller;
$subRequest = $request->duplicate($query, null, $path);
return $this->container->get('http_kernel')->handle($subRequest, HttpKernelInterface::SUB_REQUEST);
}
它使用$request->duplicate
克隆当前请求。副本复制已发布的值(和其他内容)。
您可以尝试在触发转发之前手动从请求中删除提交的表单数据。
看起来像这样:
$request->request->remove('THE_NAME_OF_YOUR_FORM_PARAMETER');
#what your getBlockPrefix of the PickColorType returns
如果symfony没有将原始请求的克隆注入控制器,它应该工作。