FOSJSRoutingBundle: "Маршрут xxx не существует" - программирование
Подтвердить что ты не робот

FOSJSRoutingBundle: "Маршрут xxx не существует"

У меня действительно странная проблема с FOSJSRoutingBundle:

Прежде всего, вот моя конфигурация: я работаю на Symfony 2.0.23 и с JQuery, на Windows 7 64 бит с WAMP (Apache 2.4.2 и PHP 5.4.3). Я выполнил все настройки из github FOSJSRoutingBundle и раскрыл мои маршруты (почти все связанные с этим проблемы, которые я мог найти с помощью googling (на github FOSJSRoutingBundle, здесь и на разных форумах), были из-за того, что люди не выставляли свои маршруты, но я попытался php app/console fos: js-routing: debug и я вижу свои маршруты). JS добавляется в макет (код макета в конце).

Пытаясь сгенерировать URL для маршрутов в js, вначале я хотел создать два разных маршрута, но для теста я создал код js ниже:

    //Code inside this function is working
    $("select").change(function () {
      param=this.options[this.selectedIndex].value;
      test1=Routing.generate('myBundle_step3', { myParam: param });
      alert(test1);
      window.location=Routing.generate('myBundle_step2');
    });
    //Code inside this one is also working
    $('input[type="checkbox"]').change(function() {
      test=Routing.generate('myBundle_step2');
    }).change();
    //This is not working
    test=Routing.generate('myBundle_step2');
    alert(test);

С помощью этого кода я получаю ошибку javaScript "Маршрут myBundle_step2 не существует". Хотя первая часть все еще работает (оповещение дает мне созданную ссылку, и перенаправление идет хорошо). Если я удаляю вторую функцию, я больше не получаю ошибку Javascript.

Если во второй функции я заменяю step2 на step3, возникает ошибка "Маршрут myBundle_step3 не существует". Я попытался очистить кэш и запустить приложение php app/console: снова установить --symlink, но безрезультатно.

Вот соответствующий код контроллера (реальный код немного длинный, и я не думаю, что он уместен, если вы так думаете, я мог бы поставить его в любом случае:

    namespace my\Bundle\Controller;
    class IndividuController extends Controller
    {
      public function step2Action() {
        Some code
      }
      public function step3Action($myParam) {
        Some code
      }
    }

Файл конфигурации routing.yml относительно комплекта:

    myBundle_step2:
      pattern: /step/2
      defaults: {_controller: myBundle:Individu:step2}
      options:
        expose: true
    myBundle_step3:
      pattern: /step/3/{myParam}
      defaults: {_controller: myBundle:Individu:step3}
      options:
        expose: true

Файл app/config/routing.yml:

    fos_js_routing:
      resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml"

    myBundle:
      resource: "@myBundle/Resources/config/routing.yml"
      prefix:   /

Информация о макете:

     <!-- jQuery via Google + local fallback, see h5bp.com -->
        <script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js">    </script>
        <script>window.jQuery || document.write('<script src="js/jquery-1.7.1.min.js"><\/script>')</script>
           {% javascripts 'bootstrap/js/bootstrap.js'
                        'bundles/fosjsrouting/js/router.js'
                        'bundles/crrisuaps/js/suaps.js' %}
               <script type="text/javascript" src="{{ asset_url }}"></script>
           {% endjavascripts %}
        <script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>
       </body>
    </html>

Результат php app/console router: debug (я оставил только релевантную информацию + я оставил уведомление о неопределенной переменной на всякий случай, это уведомление я получил, так как добавил эту библиотеку, библиотека все еще работает, и я не думаю, что проблема может возникнуть отсюда:

C:\wamp\www\suapsRepo\suaps>php app/console router:debug

Примечание: неопределенная переменная: kPathUrl в C:\wamp\www\suapsRepo\suaps\vendor\html2     pdf_class\tcpdfConfig.php в строке 80

Стек вызовов:        0,0070 231536 1. {main}() C:\wamp\www\suapsRepo\suaps\app\console: 0        0.0209 685656 2. require_once ('C:\wamp\www\suapsRepo\suaps\app\bootstr     ap.php.cache ') C:\wamp\www\suapsRepo\suaps\app\console: 10        0.0212 701752 3. require_once ('C:\wamp\www\suapsRepo\suaps\app\autoloa     d.php ') C:\wamp\www\suapsRepo\suaps\app\bootstrap.php.cache: 3        0.1335 2998152 4. require_once ('C:\wamp\www\suapsRepo\suaps\vendor\html     2pdf\html2pdf.class.php ') C:\wamp\www\suapsRepo\suaps\app\autoload.php: 51        0.1379 3361792 5. require_once ('C:\wamp\www\suapsRepo\suaps\vendor\html     2pdf_class\myPdf.class.php ') C:\wamp\www\suapsRepo\suaps\vendor\html2pdf\html2p     df.class.php: 19        0.1385 3393792 6. require_once ('C:\wamp\www\suapsRepo\suaps\vendor\html     2pdf_class\tcpdfConfig.php ') C:\wamp\www\suapsRepo\suaps\vendor\html2pdf_class     \ myPdf.class.php: 12

[маршрутизатор] Текущие маршруты

    Name                                            Method Pattern
    _assetic_55f0319                                ANY    /css/55f0319.css
    _assetic_55f0319_0                              ANY    /css/55f0319_bootstrap_1.
    css
    _assetic_55f0319_1                              ANY    /css/55f0319_bootstrap-re
    sponsive_2.css
    _assetic_55f0319_2                              ANY    /css/55f0319_style_3.css
    _assetic_3608a04                                ANY    /js/3608a04.js
    _assetic_3608a04_0                              ANY    /js/3608a04_bootstrap_1.j
    s
    _assetic_3608a04_1                              ANY    /js/3608a04_router_2.js
    _assetic_3608a04_2                              ANY    /js/3608a04_suaps_3.js

    fos_js_routing_js                               ANY    /js/routing.{_format}
    myBundle_homepage                        ANY    /

    myBundle_inscription_etape1              ANY    /inscription/etape/1
    myBundle_inscription_etape2              ANY    /inscription/etape/2
    myBundle_inscription_etape3              ANY    /inscription/etape/3/{dis
    ciplineSelection}

Результат php app/console fos: js-routing: debug (я удалил уведомление PHP, но это происходит при каждой команде, которую я выполняю, кстати):

    C:\wamp\www\suapsRepo\suaps>php app/console fos:js-routing:debug
    [router] Current routes
    Name                               Method Pattern
    crrisuapsBundle_inscription_etape2 ANY    /inscription/etape/2
    crrisuapsBundle_inscription_etape3 ANY    /inscription/etape/3/{disciplineSelect
    ion}

Изменение: Кроме того, не знаю, имеет ли это отношение, но когда я пытаюсь 'php app/console fos: js-routing: debug myBundle_step2', я получаю следующую ошибку php:

[Исключение ошибки] Предупреждение: отсутствует аргумент 3 для Symfony\Bundle\FrameworkBundle\Command\RouterDebugCommand: outputRoute(), вызываемый в C:\symfonyDirectory\vendor\bundles\FOS\JsRoutingBundle\Command\RouterDebugExposedCommand.php в строке 62 и определенный в C:\serverD\vendor\symfony\src\Symfony\Bundle\FrameworkBundle\Command\RouterDebugCommand.php строка 98

4b9b3361

Ответ 1

У меня также была эта проблема. Установка параметра options.expose в конфигурации маршрутизации разрешила его для меня.

routing.yml

cart_edit:
    pattern:  /Cart/edit
    defaults: { _controller: CartCartBundle:Default:cart_edit }
    options:
        expose: true

my.js

var url = Routing.generate('cart_edit');
$.post(url, function(data) {
      //do somthing
});

При необходимости измените. Надеюсь, это решит вашу проблему.

Ответ 2

У меня была такая же проблема, и проблема была в моем файле конфигурации. Попробуйте проверить это:

# app/config/config.yml
fos_js_routing:
    routes_to_expose: [ myBundle_step2, myBundle_step3, ... ]

Ответ 3

Просто для полноты: также можно использовать аннотации (options={"expose"=true}), как описано в документации:

// src/AppBundle/Controller/DefaultController.php

/**
 * @Route("/foo/{id}/bar", options={"expose"=true}, name="my_route_to_expose")
 */
public function indexAction($foo) {
    // ...
}

Это также работает для наборов маршрутов на уровне контроллера (пример из одного из моих контроллеров):

/**
 * Channel controller.
 *
 * @Route("account/{account}/todos", options={"expose"=true})
 * @ParamConverter("account", class="AppBundle:Account", options={
 *     "repository_method" = "findOneById",
 *     "mapping": {"account": "id"},
 *     "map_method_signature" = true
 * })
 */
class TodoListController extends Controller
{