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

问题描述 投票:1回答:1

使用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。我能做什么?

php forms symfony
1个回答
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没有将原始请求的克隆注入控制器,它应该工作。

© www.soinside.com 2019 - 2024. All rights reserved.