我正处于Symfony 2.5项目的中间。 我的防火墙设置为要求对每个具有/ secured /前缀的路由进行身份验证。 我有不同类型的用户ADMIN_ROLE,USER_ROLE和匿名。 我的需要是将它们中的每一个重定向到不同的页面,如果已记录,如果是匿名的,则将其重定向到登录屏幕,如果尝试在路径上输入/web/app.php /
我创建了以下路线:
my_home_redirect:
pattern: /
defaults: { _controller: MyHomeBundle:Default:redirect }
我已经创建了以下控制器:
public function redirectAction(){
if ($this->get('security.context')->isGranted('ROLE_ADMIN')){
$render = $this->forward('MyHomeBundle:Installation:selectInstallation', array('userId'=>$user=$this->get('security.context')->getToken()->getUser()->getId()) );
}
elseif($this->get('security.context')->isGranted('ROLE_USER')){
$render = $this->forward('MyHomeBundle:Installation:selectInstallation', array('userId'=>$user=$this->get('security.context')->getToken()->getUser()->getId()) );
}
else {
// INSERT FORWARD TO THE LOGIN SCREEN
}
return $render;
}
在" else"如果用户不是管理员而不是用户,那么我应该重定向到登录屏幕的功能,但登录是由security.yml中定义的symfony的firwall管理的,我没有路由。如何在没有显式的countroller loginAction的情况下重定向到url ... / login?
答案 0 :(得分:2)
在security.yml
中,您可以指定login_path
,例如:
my_firewall:
pattern: ^/(secured_area)/
provider: my_provider
anonymous: ~
form_login:
login_path: my_login_path
default_target_path: /dashboard
在routing.yml
中,您可以将路线映射为:
my_login_path:
pattern: /my/relative/url/for/login
defaults: { _controller: MySecurityBundle:Security:login }
然后你可以使用正常的路线,在你的具体情况下:
return $this->forward($this->generateUrl('my_login_path'));
希望这个帮助