Как отлаживать (и исправлять) Symfony2 | 3 маршрута?

У меня эти маршруты определены в app/config/routing.yml в приложении Symfony 2.8:

 platform_chat: resource: "@PlatformChatBundle/Controller/" type: annotation prefix: /chat platform_admin: resource: "@PlatformAdminBundle/Controller/" type: annotation prefix: /admin #----> this is part of routing.yml but I forgot to add it easy_admin_bundle: resource: "@PlatformAdminBundle/Controller/AdminController.php" type: annotation prefix: /admin #FOSUser fos_user: resource: "@FOSUserBundle/Resources/config/routing/all.xml" 

Как вы уже заметили, PlatformAdminBundle является бэкэнд, а PlatformChatBundle – интерфейсом. Имея это в виду, я пытаюсь setuo и использовать один брандмауэр для обоих, а затем в security.interactive_login событие перенаправить на правильный маршрут | путь. Так выглядит брандмауэр:

 security: ... role_hierarchy: ROLE_CHATTER: ROLE_USER ROLE_ADMIN: ROLE_USER ROLE_SUPER_ADMIN: ROLE_ADMIN ... firewalls: ... ignored: pattern: ^/(login(_check)?|logout|resetting)$ security: false global: pattern: ^/admin/(.*)|^/chat/(.*) provider: fos_userbundle form_login: csrf_provider: security.csrf.token_manager login_path: fos_user_security_login check_path: fos_user_security_check # if true, forward the user to the login form instead of redirecting use_forward: true # login success redirecting options (read further below) always_use_default_target_path: true default_target_path: /admin target_path_parameter: _target_path use_referer: true remember_me: true logout: ~ remember_me: secret: '%secret%' lifetime: 604800 # 1 week in seconds path: / access_control: - { path: ^/chat/, role: ROLE_CHATTER } - { path: ^/admin/, role: ROLE_ADMIN } 

Но это не работает, потому что, когда я пытаюсь войти в систему как пользователь, я заканчиваю эту ошибку:

Вы должны настроить путь проверки, который будет обрабатываться брандмауэром, используя form_login в конфигурации брандмауэра безопасности.

Это заставляет меня думать, что маршруты или брандмауэр настроены неправильно. Я проверил маршруты под панелью отладки, и ни один из них не соответствует, поэтому они ошибочны. Я читал документы здесь, но это не полезно вообще, и я не получаю исправления проблемы. Вы можете взять это сообщение как вторую часть этого, но я не хочу менять тему старого и ни содержание, потому что я думаю, что это будет полезно для будущего для кого-то другого. Итак, какие-нибудь ребята? Что бы вы отлаживали такие проблемы, связанные с маршрутами? Любое исправление для моей конкретной проблемы? Я действительно застрял здесь!

Обновить

Я внес изменения, поскольку @xabbuh предложил так, что теперь app/config/routing.yml выглядит так:

 platform_chat: resource: "@PlatformChatBundle/Controller/" type: annotation prefix: /chat options: expose: true platform_admin: resource: "@PlatformAdminBundle/Controller/" type: annotation prefix: /admin options: expose: true #EasyAdminBundle easy_admin_bundle: resource: "@PlatformAdminBundle/Controller/AdminController.php" type: annotation prefix: /admin options: expose: true #FOSUser fos_user: resource: "@FOSUserBundle/Resources/config/routing/all.xml" #FOSUser Groups fos_user_group: resource: "@FOSUserBundle/Resources/config/routing/group.xml" prefix: /group #FOSJsRouting fos_js_routing: resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml" 

и “ выглядит так:

 security: ... firewalls: ... global: pattern: / anonymous: true provider: fos_userbundle form_login: csrf_provider: security.csrf.token_manager login_path: fos_user_security_login check_path: fos_user_security_check use_forward: true # if true, forward the user to the login form instead of redirecting always_use_default_target_path: true # login success redirecting options (read further below) default_target_path: /admin target_path_parameter: _target_path use_referer: true remember_me: true logout: ~ remember_me: secret: '%secret%' lifetime: 604800 # 1 week in seconds path: / access_control: - { path: ^/chat/, role: ROLE_CHATTER } - { path: ^/admin/, role: ROLE_ADMIN } 

после очистки кеша здесь мои попытки и результаты:

  • Войдите в систему как ROL_CHATTER : я собираюсь http://domain.tld/app_dev.php/chat/ как и ожидалось. Я получаю форму входа и используя действительные учетные данные. Я получаю следующее сообщение: Access Denied. Вы ХАРАКТЕР . Это правильно, потому что у меня есть слушатель в security.interactive_login и это то, что я делаю, когда пользователь регистрируется с этими кредитами.
  • Войдите в систему как ROL_ADMIN : я ROL_ADMIN на http://domain.tld/app_dev.php/admin/ как и ожидалось. Я получаю форму входа и используя действительные учетные данные. Я получаю следующее сообщение: Плохие учетные данные . Это неправильно, потому что учетные данные действительны и, по крайней мере, я должен получить другое сообщение ( Access Denied. ADMIN ), потому что слушатель в security.interactive_login но, как я уже сказал, это не то, что происходит.

Информация, связанная с слушателем, находится в этом сообщении . Что не так?

    Ваша проблема заключается в том, что регулярное выражение, используемое для соответствия запросам global брандмауэра, это /admin/(.*)|^/chat/(.*) , но ваш контрольный путь – /login_check . Как вы видите, этот путь не будет соответствовать вашему брандмауэру, что приведет к сообщению об ошибке, которое вы опубликовали.

    Если бы я был вами, я бы просто сбросил брандмауэр, чтобы связать вещи, связанные с регистрацией, и изменить регулярное выражение для global брандмауэра на / . Тогда вам нужно будет добавить anonymous: true чтобы пользователи, которые не вошли в систему, могли получить доступ к форме входа. Доступ к вашим защищенным областям будет по-прежнему запрещен вашей секцией управления доступом.