【问题标题】:Symfony - Form redirectSymfony - 表单重定向
【发布时间】:2016-02-10 13:01:49
【问题描述】:

我正在 Symfony 中为我大学的编程课构建简单的汽车租赁应用程序。

在 URL /search 我向用户显示一个表单。现在,当表单被提交时,他的 /search 用户再次呈现了不同的模板

这是表单代码:

class SearchQueryType extends AbstractType
{
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('pickupCity', TextType::class)
            ->add('returnCity', TextType::class)
            ->add('pickupDateTime', DateTimeType::class, array(
                'years' => range(2016,2017),
                'error_bubbling' => true,
            ))
            ->add('returnDateTime', DateTimeType::class, array(
                'years' => range(2016,2017),
                'error_bubbling' => true,
            ))

            ->add('save', SubmitType::class, array(
                'label' => 'Find Car',
                'attr' => array(
                    'class' => 'btn-secondary btn-lg'
                )))
        ;
    }

    public function configureOptions(OptionsResolver $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'AppBundle\Entity\SearchQuery',
        ));
    }
}

这条路线的控制器:

class SearchController extends Controller
{
    public function searchAction(Request $request)
    {
        $query = new SearchQuery();

        $form = $this->createForm(SearchQueryType::class, $query);

        $form->handleRequest($request);

        if ($form->isSubmitted() && $form->isValid()) {

            /* Some logic here */

            return $this->render('AppBundle:default:results.html.twig', array(
                'form' => $form->createView()
            ));
        }

        return $this->render('AppBundle:default:search.html.twig', array(
            'form' => $form->createView()
        ));
    }
}

但是,当提交表单时,我想重定向到 URL /results?SUBMITTED-PARMS-HERE,以便用户可以将此链接发送给某人并收到相同的结果。在 /results 上,我想再次呈现表单,这次填充了提交的搜索参数,并在下面呈现可用汽车。

我不知道它是否是处理此问题的最佳方法,当前的解决方案有效,但无法将链接发送给其他人。

编辑:

我把代码改成休闲:

 if ($form->isSubmitted() && $form->isValid()) {

            $data = $form->getData();
            $session = $this->get('session');

            $session->set('pickupCity', $data->getPickupCity());
            $session->set('returnCity', $data->getReturnCity());
            $session->set('pickupDateTime', $data->getPickupDateTime());
            $session->set('returnDateTime', $data->getReturnDateTime());

            return $this->redirectToRoute('results', array(
                'pickupCity' => $data->getPickupCity(),
                'returnCity' => $data->getReturnCity(),
                'pickupDate' => $data->getPickupDateTime()->format('d-m-Y-H-i'),
                'returnDate' => $data->getReturnDateTime()->format('d-m-Y-H-i'),
             ), 301);
        }

因此,我收到了 URL ./results/Paris/Berlin/10-02-2016-10-00/17-02-2016-10-00

在routing.yml中:

results:
    path:     /results/{pickupCity}/{returnCity}/{pickupDate}/{returnDate}
    defaults: { _controller: AppBundle:Search:result}
    methods:  [POST]

因为我只想在这条路线上接收 POST 请求,现在当我提交表单时,我收到错误页面:

No route found for "GET /results/Paris/Berling/01-07-2016-00-00/01-11-2016-00-00": Method Not Allowed (Allow: POST)

知道怎么解决吗?

编辑 2:

没关系,我的推理很糟糕。

【问题讨论】:

    标签: symfony


    【解决方案1】:

    不确定,但可能使用这个例子。

    $this->redirect($this->generateUrl('default', array('pickupCity' => $pickupCity, 'returnCity' => $returnCity, 'pickupDateTime' => $pickupDateTimepickupDateTime)));
    

    使用你自己的参数,你可以得到你放评论的地方

      /* Some logic here */
    

    【讨论】:

      【解决方案2】:

      你可以使用getQueryString()函数。

      示例:

       if ($form->isSubmitted() && $form->isValid()) {
          return $this->redirect('results?'.$request->getQueryString());
       }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-25
        • 2017-07-04
        • 2020-09-28
        相关资源
        最近更新 更多