Redirect Yii 2如果客人访问网站,则重定向至登录

Redirect Yii 2如果客人访问网站,则重定向至登录,redirect,login,yii2,Redirect,Login,Yii2,我需要一些建议,如何使重定向到登录,如果有人没有登录到该网站,他是唯一的客人 use Yii; use \yii\helpers\Url; if ( Yii::$app->user->isGuest ) return Yii::$app->getResponse()->redirect(array(Url::to(['site/login'],302))); Use可以在操作或视图中使用它,但如果您需要在许多操作中使用它,您可能需要在启动操作之前查看并限制访问

我需要一些建议,如何使重定向到登录,如果有人没有登录到该网站,他是唯一的客人

use Yii;
use \yii\helpers\Url;

if ( Yii::$app->user->isGuest )
    return Yii::$app->getResponse()->redirect(array(Url::to(['site/login'],302)));
Use可以在操作或视图中使用它,但如果您需要在许多操作中使用它,您可能需要在启动操作之前查看并限制访问

有两个选项:

  • 您可以使用@Maksym Semenykhin提到的AccessControl
  • 您可以使用下面的选项,尤其是当您希望登录的用户在登录后返回到此页面时

    public function beforeAction($action){
    if (parent::beforeAction($action)){
        if (Yii::$app->user->isGuest){
            Yii::$app->user->loginUrl = ['/auth/default/index', 'return' => \Yii::$app->request->url];
            return $this->redirect(Yii::$app->user->loginUrl)->send();
        }
    }}
    
    您还可以创建一个自定义“控制器”类,该类继承\yii\web\Controller,然后让所有需要授权的控制器继承您的自定义控制器

  • 在登录函数中,用以下代码替换重定向部分:

        $return_url = empty(Yii::$app->request->get('return'))? \yii\helpers\Url::to(['/admin/default/index']) :Yii::$app->request->get('return');
        return $this->redirect($return_url);
    

    使用“访问”部分设置对控制器中各种操作的访问

    public function behaviors()
    {
        return [
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'delete' => ['POST'],
                ],
            ],
            'access' => [
                'class' => \yii\filters\AccessControl::className(),
                'only' => ['create', 'update','index'],
                'rules' => [
                    // deny all POST requests
                    [
                        'allow' => false,
                        'verbs' => ['POST']
                    ],
                    // allow authenticated users
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                    // everything else is denied
                ],
            ],
        ];
    }
    

    我应该把它放在每个控制器中,或者…?@MaksymSemenykhin我可以这样使用吗
    return Yii::$app->getResponse()->重定向(SITE_URL.'login')?为什么要编写getResponse函数?它有什么用?我已经这样写了,但我并没有得到登录页面上的推荐人。