Я нахожусь в центре проекта Symfony 2.5. Мой брандмауэр настроен на то, чтобы запросить устное сообщение для каждого маршрута, который имеет /secure/prefix. У меня разные типы пользователей 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" функции я shoud punt перенаправляет на экран входа, если пользователь не является администратором, а не пользователем, но логин управляется firwall symfony, определенным в security.yml, и у меня нет маршрута к тому, что. Как che перенаправить на url.../login, не имея явного счетчика loginAction?
В 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'));
Надеюсь, что эта помощь
FOSUserBundle
? Что говорит раздел «Маршрут» в профилировщике, когда вы находитесь в пути/login
?