У меня довольно глупый вопрос. Я пытаюсь создать url в twig используя переменные JS.
Он работает, когда я пишу их вручную:
var url = "{{ path('geolocation', {'latitude':'41.39109','longitude':'2.15485','accuracy':'1114'}) }}";
но это не происходит, когда я использую переменные:
var url = "{{ path('geolocation', {'latitude':latitude,'longitude':longitude,'accuracy':accuracy}) }}";
Что может случиться? Конечно, переменные существуют и правильно определены.
Кажется, что он не получает параметр правильно:
Во время рендеринга шаблона было выбрано исключение ("Точность параметра" для геолокации маршрута "должна соответствовать" [^/] ++ "(" "данный") для создания соответствующего URL-адреса. ").
Но когда я иду:
console.log(latitude + " " + longitude + " " + accuracy);
результат
41.39109 2.15485 1114
Я предлагаю вам использовать FOSJsRoutingBundle:
var url = Routing.generate('geolocation', { latitude: latitude, longitude: longitude, accuracy:accuracy })
NB: Позаботьтесь о том, чтобы добавить правильное включение js файла и выставить маршрут контроллера, как описано в документе.
Я не знаком с TWIG, но в обычной JS вашему URL присваивается строка, а Javascript не может/не заменяет имена переменных в обычных строках. Вам нужно будет сделать что-то вроде:
var url = "{{ path('geolocation', {'latitude':" + latitude + ",'longitude':" + longitude + ",'accuracy':" + accuracy + "}) }}";
ES6, если вы можете использовать его, имеет другой способ: обратные тики:
var url = '{{ path('geolocation', {'latitude':${latitude},'longitude':${longitude},'accuracy':${accuracy}"}) }}';
Который маркирует выражения, подлежащие оценке, путем их включения в $ {...}
path
- это функция ветки, которая уже будет обработана перед отправкой вывода клиенту. Вот почему этот подход не будет работать, так как переменные javascript определены на стороне клиента и неизвестны при отображении шаблона.