Php Symfony3.3重定向到路由不采用定义的路径
我正在使用FOSUserBundle,我只想在它的所有路由前面加一个“/account”。 我有一个从FOSUserBundle继承的UserBundle:Php Symfony3.3重定向到路由不采用定义的路径,php,symfony,routing,fosuserbundle,symfony-3.3,Php,Symfony,Routing,Fosuserbundle,Symfony 3.3,我正在使用FOSUserBundle,我只想在它的所有路由前面加一个“/account”。 我有一个从FOSUserBundle继承的UserBundle: <?php //UserBundle.php namespace UserBundle; use Symfony\Component\HttpKernel\Bundle\Bundle; class UserBundle extends Bundle { public function getParent() {
<?php
//UserBundle.php
namespace UserBundle;
use Symfony\Component\HttpKernel\Bundle\Bundle;
class UserBundle extends Bundle
{
public function getParent()
{
return 'FOSUserBundle';
}
}
并在我的捆绑包中导入FOS路线:
#UserBundle/config/routing.yml
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: /user
我试图通过XML(覆盖父文件)或yml逐个覆盖文件和所有路由。我总是定义好路由(bin/console debug的输出:route--show controllers):
但当我重定向到“fos\u user\u security\u login”路由时,我被重定向到“/login”,而不是“/account/login”
如果你知道原因的话,请告诉我:p
编辑:这是security.yml中的防火墙和ACL
firewalls:
# disables authentication for assets and the profiler, adapt it according to your needs
dev:
pattern: ^/(_(profiler|wdt)|css|images|js)/
security: false
main:
pattern: ^/
form_login:
check_path: /account/login_check
provider: fos_userbundle
csrf_token_generator: security.csrf.token_manager
# if you are using Symfony < 2.8, use the following config instead:
# csrf_provider: form.csrf_provider
logout:
path: /account/logout
target: /account/login
anonymous: true
access_control:
# authorise to login and reset password for everyone
- { path: ^/account, role: IS_AUTHENTICATED_ANONYMOUSLY }
防火墙:
#禁用资产和探查器的身份验证,根据需要进行调整
开发人员:
模式:^/((探查器wdt)| css |图像| js)/
安全性:错误
主要内容:
模式:^/
表格(u)登入:
检查路径:/account/login\u检查
提供商:fos_用户包
csrf_令牌_生成器:security.csrf.token_管理器
#如果您使用的是Symfony<2.8,请改用以下配置:
#csrf\u提供程序:form.csrf\u提供程序
注销:
路径:/account/注销
目标:/account/登录
匿名:是的
访问控制:
#授权每个人登录并重置密码
-{path:^/account,role:IS_AUTHENTICATED_ANONYMOUSLY}
问题可能出在
#UserBundle/config/routing.yml
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: /user
它可能会用默认的登录路径覆盖您正在定义的登录路径。尝试在路由文件中添加以下内容:
login:
path: /account/login
defaults: { _controller: FOSUserBundle:Security:login }
login_check:
path: /account/login_check
defaults: { _controller: FOSUserBundle:Security:check }
导入所有管线后,或仅从FOSUserBundle添加所需的管线。您可以从供应商目录下的FOSUserBundle/Resources/config/routing/all.xml中获取它们。我发现了问题,因为管理不善。
我试图访问
/
并将其重定向到/account/login
,但我没有为/
路径设置ACL,这意味着它会自动将我重定向到/login
,给我的印象是,问题出在我的重定向上。显示你的安全性。我在文章末尾添加了它;)模板覆盖起作用,但控制器覆盖似乎也不起作用
#UserBundle/config/routing.yml
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: /user
login:
path: /account/login
defaults: { _controller: FOSUserBundle:Security:login }
login_check:
path: /account/login_check
defaults: { _controller: FOSUserBundle:Security:check }