symfony 4-表单选择后重定向

时间:2018-11-26 10:37:54

标签: symfony symfony4

我有一个问题:提交带有select元素的表单后,我无法重定向。

我必须选择一项职责(永久性),选择并提交后,我必须重定向到其页面。重定向不会发生,下面是控制器。

/**
 * @Route("/", name="home")
 * @Route("/permanences/{id}", name="perm_show")
 */
public function home(Request $request)
{
    $form = $this->createForm(SelectPermanenceType::class, $permanence = null);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())
    {
        $permanence = $form['nom']->getData();

    }
    var_dump($permanence );

    return $this->render('webclient/home.html.twig', [
    'SelectPermanence' => $form->createView()
]);
}

/**
 * @Route("/permanences", name="permanences")
 */
public function index(PermanenceRepository $repo)
{

    $permanences = $repo->findAll();

    return $this->render('webclient/permanences.html.twig', [
        'controller_name' => 'WebclientController',
        'permanences' => $permanences
    ]);
}

/**
 * @Route("/permanences/new", name="perm_new")
 * @Route("/permanences/{id}/edit", name="perm_edit")
 */
public function form(Permanence $permanence = null, Request $request, ObjectManager $manager)
{
    if(!$permanence){
        $permanence = new Permanence();
    }

    $form = $this->createForm(PermanenceType::class, $permanence);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())
    {
        if(!$permanence->getId()){
           $permanence->setCreatedAt(new \DateTime());
        }

        $manager->persist($permanence);
        $manager->flush();

        return $this->redirectToRoute('perm_show', ['id' => $permanence->getId()]);
    }

    return $this->render('webclient/new_perm.html.twig', [
        'newPermanence' => $form->createView(),
        'editMode' => $permanence->getId() !== null
    ]);
}

/**
 * @Route("/permanences/{id}", name="perm_show")
 */
public function show(Permanence $permanence)
{

    return $this->render('webclient/show.html.twig',[
        'permanence' => $permanence
    ]);
}

页面显示正确,dowpdown也显示正确,但是当我选择并发送时,什么也没有发生。 有人知道吗?

1 个答案:

答案 0 :(得分:0)

您必须更改路线的显示顺序。他们最好有以下顺序:

  1. 永久性
  2. 显示
  3. 新建并修改

如下:

/**
 * @Route("/", name="home")
 */
public function home(Request $request)
{
    $form = $this->createForm(SelectPermanenceType::class, $permanence = null);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())
    {
        $permanence = $form['nom']->getData();

    }
    var_dump($permanence );

    return $this->render('webclient/home.html.twig', [
    'SelectPermanence' => $form->createView()
]);
}

/**
 * @Route("/permanences", name="permanences")
 */
public function index(PermanenceRepository $repo)
{

    $permanences = $repo->findAll();

    return $this->render('webclient/permanences.html.twig', [
        'controller_name' => 'WebclientController',
        'permanences' => $permanences
    ]);
}

/**
 * @Route("/permanences/{id}", name="perm_show")
 */
public function show(Permanence $permanence)
{

    return $this->render('webclient/show.html.twig',[
        'permanence' => $permanence
    ]);
}

/**
 * @Route("/permanences/new", name="perm_new")
 * @Route("/permanences/{id}/edit", name="perm_edit")
 */
public function form(Permanence $permanence = null, Request $request, ObjectManager $manager)
{
    if(!$permanence){
        $permanence = new Permanence();
    }

    $form = $this->createForm(PermanenceType::class, $permanence);

    $form->handleRequest($request);

    if ($form->isSubmitted() && $form->isValid())
    {
        if(!$permanence->getId()){
           $permanence->setCreatedAt(new \DateTime());
        }

        $manager->persist($permanence);
        $manager->flush();

        return $this->redirectToRoute('perm_show', ['id' => $permanence->getId()]);
    }

    return $this->render('webclient/new_perm.html.twig', [
        'newPermanence' => $form->createView(),
        'editMode' => $permanence->getId() !== null
    ]);
}

我也删除了perm_show的重复路由定义,在每个路由上只能定义一次。