【问题标题】:Symfony - render or redirect?Symfony - 渲染或重定向?
【发布时间】:2019-03-01 23:35:29
【问题描述】:

我使用 /seat-number/add 路由进行了 API 调用,该路由呈现表单并更新数据库。但是当我改变时

return $this->render('@AdminTemplates/pages/seat-number-add.html.twig', array(
        'form' => $form->createView(),
    ));

return $this->redirectToRoute('seat_number_list');

我在索引页面上的添加按钮不会从索引页面抛出到添加页面..

这是我的整个 api 调用

    public function seatEditAction(Request $request, $id)
{
    $edit = $this->getDoctrine()->getRepository(Seats::class)->find($id);

    $form = $this->createFormBuilder($edit)
        ->add('seatNumber', TextType::class, array('label' => 'Seat Number', 'attr' => ['class' => 'form-control']))
        ->add('save', SubmitType::class, array('label' => 'Update', 'attr' => ['class' => 'btn btn-primary pull-right action-save']))
        ->getForm();

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid()) {
        $em = $this->getDoctrine()->getManager();
        $em->flush();
    }

    return $this->render('@AdminTemplates/pages/seat-number-edit.html.twig', array(
        'form' => $form->createView(),
    ));
}

【问题讨论】:

    标签: symfony routes


    【解决方案1】:

    要在表单成功完成后重定向,您需要将第二个 return 语句放在 if 块内。

    您编写的操作在正常用户流程中被调用两次:第一次显示表单,第二次在表单提交时调用以验证它并执行所需的任何逻辑。 if 语句检查这两种情况中的哪一种是当前情况并提供不同的执行路径。 这就是为什么您需要保留现有的 return 语句:它的工作是在第一次访问时显示表单(如果验证失败,则再次显示)。

    我还注意到,在同一个 if 块中,您获得了实体管理器,但显然没有执行任何业务逻辑。这就是您应该调用一些服务来实现需要完成的任何业务操作的地方。

    【讨论】:

    • ` if ($this->render('@AdminTemplates/pages/seat-number-edit.html.twig', array('form' => $form->createView(),) )){};return $this->redirectToRoute('seat_number_list');` 还是一样.. 没有重定向
    【解决方案2】:

    我刚刚添加了两个返回语句,它可以工作..

     if ($form->isSubmitted() && $form->isValid()) {
            $em = $this->getDoctrine()->getManager();
            $em->flush();
    
            return $this->redirectToRoute('seat_number_list');
    
        }
    
        return $this->render('@AdminTemplates/pages/seat-number-edit.html.twig', array(
            'form' => $form->createView(),
        ));
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 2021-10-11
      • 2020-06-30
      • 1970-01-01
      • 2019-12-04
      • 1970-01-01
      • 2018-11-07
      相关资源
      最近更新 更多