如果用户未登录(与 FOSUser 和 SonataAdmin 一起使用)并调用http://domain.com/app_dev.php
(dev)或http://domain.com
(prod),我正在尝试重定向,那么我希望在这两种情况下都重定向到,/login
所以我在以下位置编写了这个配置app/routing.yml
:
root:
path: /
defaults:
_controller: FrameworkBundle:Redirect:urlRedirect
path: /login
permanent: true
那行得通,但我有一个问题,因为我在控制器中有这个:
/**
* @param Request $request
*
* @return array
* @Route("/", name="brand")
* @Method("GET")
* @Template()
*/
public function indexAction(Request $request)
{
....
}
然后,当我尝试brand
使用以下链接按照示例调用路由时:http://domain.com/app_dev.php/?email=7x-xRFClkjw
(dev) 或http://domain.com/?email=7x-xRFClkjw
(prod) 我被重定向到/login
. 我最好的想法是将我的代码更改为:
/**
* @param Request $request
*
* @return array
* @Route("/bp", name="brand")
* @Method("GET")
* @Template()
*/
public function indexAction(Request $request)
{
....
}
然后使用路由重定向到新的/bp
而不是/
该功能(这主要是因为用户已经有大量的电子邮件具有以前共享的链接,我无法更改)。但我不知道如何写这个规则,routing.yml
因为如果我写了这个:
bp:
path: /
defaults:
_controller: FrameworkBundle:Redirect:redirect
route: brand
permanent: true
我将结束一个重定向循环。我还可以更改默认路由/login
的设置方式,我只是找不到正确的文档。这篇文章背后的大想法是为/
. 任何人都可以给我一些帮助吗?
作为额外信息,这是我security.yml
文件的一部分:
firewalls:
...
admin_area:
pattern: ^/
anonymous: ~
form_login:
provider: fos_userbundle
csrf_provider: form.csrf_provider
# the user is redirected here when they need to log in
login_path: /login
# submit the login form here
check_path: /login_check
# login success redirecting options (read further below)
always_use_default_target_path: true
default_target_path: /admin/dashboard
target_path_parameter: _target_path
use_referer: false
failure_path: /admin/dashboard
failure_forward: false
logout:
path: /logout
更新
实际上来自@emmanuel-hdz-díaz 的代码给了我另一个想法,我不需要创建内核侦听器或添加太多代码,只需在我的控制器上执行此操作即可:
if ($request->query->get('email')) {
...
} else {
return $this->redirect($this->generateUrl('sonata_user_admin_security_login'));
}
我能够将用户重定向到/login
路线。