我有一个组件,其中有一个init()函数,在每个操作之前调用。
我只需要检查会话是否已过期,将用户重定向到登录。
这是我的代码,配置/主.php 响应项 -
'MyGlobalClass'=>[
'class'=>'commoncomponentsMyGlobalClass'
],
和
'bootstrap' => ['log','MyGlobalClass'],
组件/MyGlobalClass .php :
class MyGlobalClass extends yiibaseComponent{
public function init() {
//echo "Hi";
if(Yii::$app->user->isGuest)
{
//echo 'called';exit;
Yii::$app->getResponse()->redirect(Yii::$app->urlManager->createUrl('login'));
}
//parent::init();
}
}
所以它进入 if{} 内部但不重定向到登录页面。
你可以试试这个,它对我有用:
return Yii::$app->getResponse()->redirect('admin/page/signin');
您可以使用它来发送您的回复
Yii::$app->response->send();
但请查看控制器/操作不同访问控制指南http://www.yiiframework.com/doc-2.0/guide-security-authorization.html
您可以尝试以下代码:
Yii::$app->getResponse()->redirect(Yii::$app->urlManager->createUrl('login'));
return;
正确的方法是:
Yii::$app->response->redirect(Yii::$app->urlManager->createAbsoluteUrl('site/logout'));
return;
这样你就会得到一个无限的重定向循环: 每次调用控制器时都会调用组件,重定向永远不会停止。
最好从每个控制器上的public function behaviors()
管理它,请查看 Yii2 文档的授权部分。
也许这个可以帮助你:)
return Yii::$app->getResponse()->redirect(['user/login']);
或
return Yii::$app->getResponse()->redirect(Yii::$app->urlManager->createUrl('user/login'));