Zend Framework 2: Как перенаправить из плагина?

Я работаю над плагином 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();

Любая идея?

0

Решение

Вы возвращаете ответ контроллеру, но не возвращаете его от самого контроллера.

Например, вы можете попробовать это ваш контроллер:

$check = $this->IdentityPlugin()->checkLogin();
if ($check instanceof Response) {
return $check;
}

Более сложным решением может быть остановка распространения контроллера MvcEvent, установите любой ответ, который вы хотите, и вернитесь напрямую.

0

Другие решения

Привет вам нужно настроить плагин на фабриках в 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');
}

}

}
0

По вопросам рекламы [email protected]