Symfony:路由问题
Symfony : Issue with routing
我是 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:为了解决我的问题,我只需要在我的 security.yml 中添加 default_target_path :
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
刷新你的缓存,控制台命令:php bin/console cache:clear
,如果你使用的是旧的 symfony,它是 app/console 而不是 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 中工作时,如果不在带有内置控制台的编辑器中工作,则始终打开控制台 window。我认为 JetBeans 有它,所有这些教程都在其中完成。 PS,symfony 的 youtube 教程很棒,例如 Symfony 和 PHP 编程频道有很好的初学者教程。
我是 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:为了解决我的问题,我只需要在我的 security.yml 中添加 default_target_path :
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
刷新你的缓存,控制台命令:php bin/console cache:clear
,如果你使用的是旧的 symfony,它是 app/console 而不是 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 中工作时,如果不在带有内置控制台的编辑器中工作,则始终打开控制台 window。我认为 JetBeans 有它,所有这些教程都在其中完成。 PS,symfony 的 youtube 教程很棒,例如 Symfony 和 PHP 编程频道有很好的初学者教程。