Symfony表单重定向到控制器而不是路由

时间:2018-08-30 20:35:39

标签: php forms symfony

使用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。我该怎么办?

1 个答案:

答案 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没有将原始请求的副本注入控制器,则它应该可以工作。