Twig: передать значение текстового поля в качестве параметра маршрутизации

Я пытаюсь перейти на другую страницу, и мне нужно передать значение текстового поля. Это мой код:

{% extends "base.html.twig" %}

{% block body %}
    <button onclick = "host()">Host the session</button>
    <button onclick = "join()">Join as player</button>
    <label>
        Player name:
        <input type = "text" id = "nameField">
    </label>
{% endblock %}
{% block javascripts %}
    <script>
        function host() {
            location.href = "{{ path('host') }}";
        }

        function join() {
            location.href = "{{ path('player', {'playerName' : nameField.value}) }}";
        }
    </script>
{% endblock %}

Когда я нажимаю кнопку «Присоединиться», я получаю исключение времени выполнения, в котором говорится, что «nameField» не существует. Я попытался поместить значение текстового поля в переменную javascript, но я тоже не могу сослаться на это. Возможен ли вообще такой маршрут? В качестве альтернативы, могу ли я как-то избежать использования javascript и маршрута напрямую в блоке тела?

Взгляните на github.com/FriendsOfSymfony/FOSJsRoutingBundle, он поможет вам создать URL-адрес исключительно с помощью JS

Nico Haase 07.01.2019 11:01

Мне кажется странным, что мой самый простой вариант использования требует пакета сообщества. Нет ли другого способа ссылаться на простое текстовое поле внутри Twig?

hildebro 07.01.2019 11:04

Ваш «самый простой вариант использования» не поддерживается самой Symfony, так как он основан не только на генерации маршрутов сервером: когда Twig запускается, нет такого поля, как nameField, для доступа к значению из

Nico Haase 07.01.2019 11:08

Похоже, то, что я делаю, не является лучшей практикой для Symfony. Было бы «чище» создать форму, содержащую мое текстовое поле, внутри контроллера, а затем использовать ответ для маршрутизации?

hildebro 07.01.2019 11:22

Проблема в том, что twig отображает шаблон до того, как он будет передан клиенту, на котором обрабатывается JS. Таким образом, на вашем сервере он пытается заменить атрибут nameField.value, который предназначен для JS, чтобы уже определить, какой URL-адрес использовать. Либо вы замените его действительным значением-заполнителем, которое будет отключено с помощью JS, используйте статический URL-адрес вместо вспомогательного метода из twig, либо вы можете изучить пакет.

dbrumann 07.01.2019 11:23

^ это или получить маршрут с помощью ajax

DarkBee 07.01.2019 12:02
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
6
46
1

Ответы 1

Вам нужно получить его из массива app.request.

Это работает для POST

app.request.get('nameFiled')

Это работает для GET

app.request.query.get('nameFiled')

если ваше имя ввода nameField

<input name = "nameField">

Это не имеет ничего общего с проблемой OP.

DarkBee 08.01.2019 16:55

Другие вопросы по теме