Допустим, что у моей страницы 10 разделов, в 6 из них мне нужно проверить, вошел ли пользователь в систему, а если нет, перенаправляйте его на страницу входа/регистрации ,Аутентификация с доктриной в Zend Framework 2 Хорошая практика
я обнаружил, что повторять этот код в контроллере этих 6 страниц:
public function actionthatneedsauthAction()
{
$sl = $this->getServiceLocator();
$authService = $sl->get('doctrine.authenticationservice.orm_default');
$user = $authService->getStorage()->read(); //is the user logged in?
if ($user) { //auth successful
//-------------/*CODE FOR THIS SPECIFIC CONTROLLER GOES HERE*/--------
return new ViewModel(array(
'user' => $user,
'somethingelse' => $somethingelse
));
} else { //auth denied
return $this->redirect()->toRoute(user, array('action' => 'login'));
}
}
Я попытался инкапсулировать, что в сервис, называемый islogged
(это модель, а не контроллер), но Я не мог заставить его работать, потому что я не мог найти способ перенаправления на контроллер изнутри модели, я знаю, как перенаправить контроллер на другой контроллер.
Так что в моем usermanager.php
я имел функцию как этот:
public function islogged()
{
$sl = $this->getServiceLocator();
$authService = $sl->get('doctrine.authenticationservice.orm_default');
$user = $authService->getStorage()->read(); //is the user logged in?
if ($user) { //auth successful
return $user;
} else {
/*
redirect to the login screen, dont know how to do it,
this code doesnt work here:
return $this->redirect()->toRoute(NULL, array(
'controller' => 'user',
'action' => 'login'
));
*/
}
}
поэтому идея в том, что в моих контроллерах я только должен был написать:
$user = islogged();
и все повторения кода я упомянутые больше не понадобятся.
Является ли это хорошей практикой, что я пытался сделать с помощью функции usermanager.php islogged
? Если это хорошая практика, как я должен перенаправить на контроллер изнутри модели?
Если это не хорошая практика, которая будет способом избежать повторения кода, который у меня есть в контроллерах?
Я знаю, что могу установить шаг аутентификации в onboostrap()
, но в этом случае auth будет запущен для всех моих страниц, и я просто хочу его в некоторых из них.