使用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。我该怎么办?
答案 0 :(得分:0)
如果您进一步了解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没有将原始请求的副本注入控制器,则它应该可以工作。