Я работаю над плагином IdentityPlugin
проверить статус входа пользователя. Если пользовательский сеанс выходит из системы, я хочу перенаправить его на страницу входа. Мой код приведен ниже.
public function checkLogin($logout=true,$next='login'){
if($this->auth->hasIdentity()){
}elseif ($logout){
return $this->getController()->redirect()->toRoute($next);
}
}
в моем контроллере
// Check identity, if not found- redirect to login
$this->IdentityPlugin()->checkLogin();
Любая идея?
Вы возвращаете ответ контроллеру, но не возвращаете его от самого контроллера.
Например, вы можете попробовать это ваш контроллер:
$check = $this->IdentityPlugin()->checkLogin();
if ($check instanceof Response) {
return $check;
}
Более сложным решением может быть остановка распространения контроллера MvcEvent
, установите любой ответ, который вы хотите, и вернитесь напрямую.
Привет вам нужно настроить плагин на фабриках в module.config.php
и передать сервис-менеджер __construct
как показано ниже:
'controller_plugins' => array(
'factories' => array(
'CheckLogin' => function($sm){
$checkLogin = new Application\Plugin\CheckLogin($sm);
return $checkLogin;
},
),
),
Тогда в вашем плагине вы сможете вызывать все, что вам нужно, используя Service Manager:
namespace Application\Plugin;
use Zend\Mvc\Controller\Plugin\AbstractPlugin;
class CheckLogin extends AbstractPlugin
{
public function __construct($sm)
{
$auth = $sm->getServiceLocator()->get("Zend\Authentication\AuthenticationService");
if( !$auth->hasIdentity()){
$sm->getController()->plugin('redirect')->toUrl('/login');
}
}
}