Symfony: проблема с маршрутизацией
Я новичок в Symfony, я следую учебному пособию, части о безопасности и управлении пользователями, но я застрял с проблемой, которая, кажется, исходит от моей маршрутизации.
Я только что создал форму входа, которая на самом деле работает, когда я иду на /app_dev.php/login
, форма появляется, я могу заполнить ее, но когда я отправляю ее, я получил следующую ошибку:
No route found for "GET /" (from "http://dev-05/ANTOINE/Symfony/web/app_dev.php/login")
404 Not Found - NotFoundHttpException
1 linked Exception:
ResourceNotFoundException »
После получения этой ошибки, если я возвращаюсь на домашнюю страницу, я вижу, что я подключен, поэтому он работает, а перенаправление - нет.
Согласно документации, это происходит из-за неправильной настройки маршрутизации, но я не знаю, где я допустил ошибку.
Вот моя форма, мои security.yml и мои файлы routing.yml:
{% extends "AKMUserBundle::layout.html.twig" %}
{% block akmuser_body %}
{% if error %}
<div class="alert alert-danger">{{ error.message }}</div>
{% endif %}
<form action="{{ path('login_check') }}" method="post">
<label for="username">Login : </label>
<input type="text" id="username" name="_username" value="{{ last_username }}" />
<label for="password">Mot de passe :</label>
<input type="password" id="password" name="_password" />
<br />
<input type="submit" value="Connexion" />
</form>
{% endblock %}
security.yml:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
memory:
users:
user: { password: userpass, roles: ['ROLE_USER'] }
admin: { password: adminpass, roles: ['ROLE_ADMIN'] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: true
form_login:
login_path: login
check_path: login_check
logout:
path: logout
target: /platform
routing.yml:
akm_platform:
resource: "@AKMPlatformBundle/Resources/config/routing.yml"
prefix: /platform
login:
path: /login
defaults:
_controller: AKMUserBundle:Security:login
login_check:
path: /login_check
logout:
path: /logout
Я знаю что .yml
файлы очень чувствительны и требуют 4 пробела вместо обычного отступа, поэтому я перезаписывал файлы построчно, с пробелами, но он все еще не работает.
Я надеюсь, что кто-то может мне помочь:p Если вам нужна информация, не стесняйтесь!
Изменить: вот мой результат php bin/console debug:router
Изменить 2: чтобы избавиться от моей проблемы, мне просто нужно было добавить default_target_path в мой security.yml:
security:
encoders:
Symfony\Component\Security\Core\User\User: plaintext
role_hierarchy:
ROLE_ADMIN: ROLE_USER
ROLE_SUPER_ADMIN: [ROLE_USER, ROLE_ADMIN, ROLE_ALLOWED_TO_SWITCH]
providers:
in_memory:
memory:
users:
user: { password: userpass, roles: ['ROLE_USER'] }
admin: { password: adminpass, roles: ['ROLE_ADMIN'] }
firewalls:
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
anonymous: true
form_login:
login_path: login
check_path: login_check
default_target_path: akm_platform_home
logout:
path: logout
target: /platform
1 ответ
Обновите кеш, консольная команда:php bin/console cache:clear
, если вы используете более старый Symfony, это приложение / консоль вместо bin/console. Вы можете отладить ваши маршруты с помощью команды: php bin/console debug:router
, Это основная системная консоль, и в моем случае я использую ее в Windows. Вы должны быть в папке проекта, чтобы они работали.
Я не уверен, где вы будете перенаправлены на "/", я недавно начал работать в Symfony, и большинство проблем было связано с обновлением кэша и неправильными yml и именами маршрутов. Однако в вашем случае может случиться так, что Symfony перейдет на маршрут / при успешном входе в систему, вы можете добавить default_target_path: your_homepage_route_name or /where_you_want_to_go
это может быть то, что проблема здесь.
Поскольку вы новичок, когда вы включаете маршруты и определяете для них префикс, вы можете легко забыть, что вы установили его, поэтому отладка маршрутизатора великолепна, поскольку вы можете легко увидеть всю информацию там. При работе в Symfony всегда открывайте окно консоли, если не работаете в edior со встроенной консолью. Я думаю, что у JetBeans есть это, все эти уроки сделаны в этом. PS, уроки YouTube для Symfony великолепны, например, канал Symfony и PHP Programming имеет хорошее руководство для начинающих.