Symfony-呈现还是重定向?

时间:2018-09-26 08:42:24

标签: symfony routes

我使用/ 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(),
    ));
}

2 个答案:

答案 0 :(得分:0)

要在成功完成表单后重定向,您需要在return块中放置第二条if语句。

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

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

答案 1 :(得分:0)

我刚刚添加了两个return语句,它就可以工作。

 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(),
    ));