Symfony 4, установите и используйте jsrouting-bundle, маршрут моего контроллера "не существует" - PullRequest
0 голосов
/ 14 ноября 2018

Начиная с 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://localhost/mywebsite/public/js/routing?callback=fos.Router.setData",, я получу /**/fos.Router.setData({"base_url":"\/mywebsite\/public","routes":[],"prefix":"","host":"localhost","port":"","scheme":"http"});

1 Ответ

0 голосов
/ 14 ноября 2018

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

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