Symfony重定向到通过控制器登录

时间:2014-12-09 15:07:29

标签: php symfony redirect

我正处于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?

1 个答案:

答案 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'));

希望这个帮助