Я пытаюсь перейти на другую страницу, и мне нужно передать значение текстового поля. Это мой код:
{% 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 и маршрута напрямую в блоке тела?
Мне кажется странным, что мой самый простой вариант использования требует пакета сообщества. Нет ли другого способа ссылаться на простое текстовое поле внутри Twig?
Ваш «самый простой вариант использования» не поддерживается самой Symfony, так как он основан не только на генерации маршрутов сервером: когда Twig запускается, нет такого поля, как nameField, для доступа к значению из
Похоже, то, что я делаю, не является лучшей практикой для Symfony. Было бы «чище» создать форму, содержащую мое текстовое поле, внутри контроллера, а затем использовать ответ для маршрутизации?
Проблема в том, что twig отображает шаблон до того, как он будет передан клиенту, на котором обрабатывается JS. Таким образом, на вашем сервере он пытается заменить атрибут nameField.value, который предназначен для JS, чтобы уже определить, какой URL-адрес использовать. Либо вы замените его действительным значением-заполнителем, которое будет отключено с помощью JS, используйте статический URL-адрес вместо вспомогательного метода из twig, либо вы можете изучить пакет.
^ это или получить маршрут с помощью ajax



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вам нужно получить его из массива app.request.
Это работает для POST
app.request.get('nameFiled')
Это работает для GET
app.request.query.get('nameFiled')
если ваше имя ввода nameField
<input name = "nameField">
Это не имеет ничего общего с проблемой OP.
Взгляните на github.com/FriendsOfSymfony/FOSJsRoutingBundle, он поможет вам создать URL-адрес исключительно с помощью JS