symfony 4 - перенаправление после выбора формы - PullRequest
0 голосов
/ 26 ноября 2018

У меня проблема: я не могу перенаправить после отправки формы с элементом 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
    ]);
}

Страница корректно отображается, даундаун тоже, но когда я выбираю и отправляю, ничего не происходит.У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 28 ноября 2018

Вы должны изменить порядок присутствия ваших маршрутов.Лучше бы они имели следующий порядок:

  1. home
  2. постоянства
  3. show
  4. new & edit

Asниже:

/**
 * @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, на каждом маршруте должен быть определен только один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...