javascript — Symfony 4, установите и используйте jsrouting-bundle, маршрут моего контроллера «не существует»

Начиная с 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"});

0

Решение

Я просто добавляю опцию «выставить», установленную в true, в аннотации моего контроллера, например так:

/**
* @Route("/API/test", name="ajax_test", options={"expose"=true})
*/
public function test(){
$test = [
'a' => 'foo',
'b' => 'faa',
];
return new JsonResponse($test);
}
0

Другие решения

Других решений пока нет …