Использовать другой маршрут при неверной отправке формы

1

Я создаю страницу, которая будет содержать несколько форм. Теперь, когда я вводил несоответствие пароля, например, я перехожу к неправильному маршруту, а именно, где находится форма, а не страница, на которой я ее создаю.

Как правильно это сделать?

html, пропущена страница "управление", все это загружено

#app/Resources/views/forms/user.html.twig
{{ form_start(form) }}
{{ form_widget(form) }}
<button type="submit" class="btn btn-primary pull-right">Submit</button>
{{ form_end(form) }}

#app/Resources/views/components/management/user/user.html.twig
<div class="container-fluid">
    <div class="row">
        <div class="col-md-6">
           {% include 'components/management/user/list.html.twig' %}
        </div>
        <div class="col-md-6">
            {% include 'components/management/user/add.html.twig' %}
        </div>
    </div>
</div>

#app/Resources/views/components/management/user/add.html.twig
<table class="table">
    <thead id="add-user-head" class="pointer">
    <tr>
        <th>Add user <span id="caret-add-user" class="caret"></span></th>
    </tr>
    </thead>

    <tbody id="add-user-body">
    <tr>
        <td>
            {{ render(controller('AppBundle:Manage:user')) }}
        </td>
    </tr>
    </tbody>
</table>

Контроллер, пропустил построитель форм

#@AppBundle/Controller/ManageController.php
public function viewAction()
    {
        return $this->render('pages/management.html.twig', array('users' => $this->listUsers()));
    }

    public function userAction(Request $request)
    {
        // 1) build the form
        $user = new User();
        $form = $this->createForm(new UserType(), $user, array(
            'action' => $this->generateUrl('manage_user'),
            'method' => 'GET'
        ));

        // 2) handle the submit (will only happen on POST)
        $form->handleRequest($request);

        if ($form->isValid() && $form->isSubmitted()) {
            // 3) Encode the password (you could also do this via Doctrine listener)
            $password = $this->get('security.password_encoder')
                ->encodePassword($user, $user->getPlainPassword());
            $user->setPassword($password);

            // 4) save the User!
            $em = $this->getDoctrine()->getManager();
            $em->persist($user);
            $em->flush();

            // ... do any other work - like send them an email, etc
            // maybe set a "flash" success message for the user

            return $this->redirectToRoute('manage');
        }

        return $this->render('forms/user.html.twig', array('form' => $form->createView()));
    }

Чтобы уточнить немного больше: неверный ввод приведет меня к странице forms/user.html.twig из-за действия формы.

Теги:
forms
twig

1 ответ

0

Я думаю, вам просто нужно другое выражение, хотя я не уверен, куда именно вы хотите перенаправить:

if ($form->isValid() && $form->isSubmitted()) {
        // same stuff
    } elseif ($form->isSubmitted()) {
        return $this->redirectToRoute('invalidSubmission');
    }
  • 0
    К сожалению, это не работает, потому что мне нужно было бы перенаправить на маршрут «управляй», который вызывает рендеринг новой формы, а не исходной. Любые пропущенные ошибки не отображаются. ps: управляющий маршрут переходит к viewAction.
  • 0
    Я думаю, что мог бы переместить логику userAction в viewAction, но я нахожу это грязным и потому что я собираюсь визуализировать кучу форм, которые будут одним большим действием. Один из способов, о котором я подумал, - это найти способ вызова useAction внутри viewAction, мне нужно выяснить это, прежде чем я смогу его протестировать :-)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню