Symfony 4 - Как передать параметры из формы в контроллер - PullRequest
1 голос
/ 15 мая 2019

У меня проблемы при попытке передать параметры из моей формы моему контроллеру.

Я пытаюсь реализовать список вариантов, который позволит отображать список пользователей в зависимости от параметров (роль)., ban ...).

Проблема в том, что я думаю, что я не получаю параметр после отправки, чтобы мой запрос был в индексе.Может ли быть проблема в том, что я повторяю одну и ту же форму в одной и той же функции до и после отправки?

Я попытался добавить теги href / onclick / к своим опциям, но это не сработало.

index.html.twig

<form class="form-group" action="{{ path('user_index') }}">
            <table class="table">
                <tr>
                    <td>
                        <select class="custom-select">
                            <option selected="">Which users to you want to see ?</option>
                            <option value="1">All</option>
                            <option value="2">Students</option>
                            <option value="3">Teachers</option>
                            <option value="4">Admins</option>
                            <option value="5">Super Admin</option>
                            <option value="6">Banned</option>
                            <option value="7">Unbanned</option>
                        </select>
                    </td>
                    <td>
                        <input type="submit" value="Submit">
                    </td>
                </tr>
            </table>
        </form>
UserController.php

/**
     * Requires ADMIN_ROLE
     *
     * @Route("/", name="user_index", methods={"GET"})
     */
    public function index(Request $request): Response
    {
        $this->denyAccessUnlessGranted('ROLE_ADMIN');

        $ban = true;

        // trying to get the value of the option in form ?
        $value = $request->request->get('value');

        switch ($value){
            case 1 :
                $users = $this->getDoctrine()
                    ->getRepository(User::class)
                    ->findAll();
                break;
            case 6 :
                $users = $this->getDoctrine()
                    ->getRepository(User::class)
                    ->findByBan($ban);
                break;
            case 7 :
                $ban = false;
                $users = $this->getDoctrine()
                    ->getRepository(User::class)
                    ->findByBan($ban);
                break;
            default:
                $users = $this->getDoctrine()
                    ->getRepository(User::class)
                    ->findAll();
                break;
        }

        return $this->render('user/index.html.twig', [
            'title' => 'User Index',
            'headtitle' => 'View all the users list',
            'users' => $users,
        ]);
    }

Ответы [ 2 ]

4 голосов
/ 15 мая 2019

у вашего выбора нет имени:

<select class="custom-select" name="userselect">
    <option selected="">Which users to you want to see ?</option>
    <option value="1">All</option>
    <option value="2">Students</option>
    <option value="3">Teachers</option>
    <option value="4">Admins</option>
    <option value="5">Super Admin</option>
    <option value="6">Banned</option>
    <option value="7">Unbanned</option>
</select>

и в вашем контроллере получите "userselect" в $ request.

4 голосов
/ 15 мая 2019

Как я понимаю, метод вашей формы - это запрос GET.Чтобы получить переменную $ _GET с помощью компонента HttpFoundation, вам необходимо:

  1. Выбранный вами ввод должен иметь имя.

Пример:

<form class="form-group" action="{{ path('user_index') }}" method="get">
            <table class="table">
                <tr>
                    <td>
                        <select class="custom-select" name="users">
                            <option selected="">Which users to you want to see ?</option>
                            <option value="1">All</option>
                            <option value="2">Students</option>
                            <option value="3">Teachers</option>
                            <option value="4">Admins</option>
                            <option value="5">Super Admin</option>
                            <option value="6">Banned</option>
                            <option value="7">Unbanned</option>
                        </select>
                    </td>
                    <td>
                        <input type="submit" value="Submit">
                    </td>
                </tr>
            </table>
</form>
Попробуйте получить параметры вашего запроса ( GET ), используя $request->query->get('users')

Проверка: Объект запроса Symfony

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