Начиная с Symfony 4, мне нужно сгенерировать динамический URL-адрес моего контроллера (контроллера, которому в будущем нужны некоторые параметры) из javascript.
После некоторых поисков в Google я нашел и установил jsrouting-bundle с помощью простого composer require friendsofsymfony/jsrouting-bundle
(Я выполнил рецепт)
Я включил эти строки в мой файл ветки:
<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
<script src="{{ path('fos_js_routing_js', { callback: 'fos.Router.setData' }) }}"></script>
<script src="build/js/global.js"></script>
Когда я загружаю свою страницу, никаких ошибок javascript не появилось.
Итак, я создал этот очень простой контроллер Symfony (для вызова AJAX):
/**
* @Route("/API/test", name="ajax_test")
*/
public function test(){
$test = [
'a' => 'foo',
'b' => 'faa',
];
return new JsonResponse($test);
}
И в моем собственном сценарии JavaScript (global.js) я попытался это:
Оповещение (Routing.generate ( ‘ajax_test’));
Но когда я загружаю страницу, я получаю эту ошибку JavaScript:
Error: The route "ajax_test" does not exist.
Почему маршрут не найден? Где моя ошибка?
Заметки :
в friendsofsymfony / jsrouting-bundle документация , с того момента, когда я выполнил команду
bin/console assets:install --symlink web
Я получаю ошибкуThe target directory "web" does not exist.
, Итак, я выполнил простоbin/console assets:install --symlink
Если я пойду в «HTTP: // локальный / МойВебСайт / государственный / JS / маршрутизации обратного вызова = fos.Router.setData«, Я получил
/**/fos.Router.setData({"base_url":"\/mywebsite\/public","routes":[],"prefix":"","host":"localhost","port":"","scheme":"http"});
Я просто добавляю опцию «выставить», установленную в true, в аннотации моего контроллера, например так:
/**
* @Route("/API/test", name="ajax_test", options={"expose"=true})
*/
public function test(){
$test = [
'a' => 'foo',
'b' => 'faa',
];
return new JsonResponse($test);
}
Других решений пока нет …