32

我想强制所有用户在访问我网站的页面之前登录。我遵循了 Larry Ullman 的教程Forcing Login for All Pages in Yii

根据教程,您可以对某些页面进行例外处理,以避免重定向到登录页面。为了检查当前控制器,它已经检查了$_GET值。我的问题是我习惯于urlManager重写 URL 并$_GET给我一个空值。有什么方法可以用来获取班级分数中的当前控制器和动作吗?

我尝试了以下方法,但在我的组件类范围内无法访问:

Yii::app()->controller->getId
4

8 回答 8

49

你试过了吗:

Yii::app()->controller->id

和:

Yii::app()->controller->action->id

?

于 2013-10-15T08:58:13.523 回答
45

是的,您可以通过反转规则获得当前controller/action路线:urlManager

Yii::app()->urlManager->parseUrl(Yii::app()->request)
于 2013-10-15T09:26:59.990 回答
22

就像现在在 Yii2

获取当前controller name

Yii::$app->controller->id

当前的controller object

Yii::$app->controller

当前action name

Yii::$app->controller->action->id

当前route

Yii::$app->requestedRoute
于 2015-03-25T09:27:54.693 回答
12

使用 Yii2,获取当前控制器对象:

Yii::$app->controller

从控制器中,使用以下命令以字符串形式获取当前操作:

Yii::$app->controller->action->id
于 2014-10-24T16:20:56.440 回答
8

在 Yii2 中:

调用的问题Yii::$app->controller->id是,当您在某处调用它时(例如:在您的顶级抽象控制器之一中),Yii::$app->controller可能尚未实例化,因此它将返回错误。

只需直接调用urlManager映射请求到路由:

var_dump(Yii::$app->urlManager->parseRequest(Yii::$app->request))
于 2015-11-20T18:09:38.453 回答
5

尝试Yii::app()->controller->getRoute()

于 2013-10-15T09:02:19.087 回答
4

如果我的问题正确,您基本上是在尝试阻止对控制器中某些操作的访问而无需登录,对吗?

如果这是您所追求的,那么正确的方法是:

  1. actionMethod()像这样在控制器中制作一个:

    class SomeController extends CController{
    
      public function actionSomeAction(){
    
        ... More code...
    
    }
    
  2. 之后,您可以使用以下命令访问该站点: path/to/application/controllerName/actionName

  3. 现在,如果您想强制用户在访问操作之前登录,请执行以下操作:

像这样进行访问控制:

 /**
     * @return array action filters
     */
    public function filters()
    {
        return array(
            'accessControl', // perform access control for CRUD operations
        );
    }

/**
 * Specifies the access control rules.
 * This method is used by the 'accessControl' filter.
 * @return array access control rules
 */
public function accessRules()
{
    return array(

        array('allow', // allow authenticated user to perform 'create' and 'update' actions
            'actions' => array('**yourActionMethodName**'),
            'users' => array('@'),
        ),

        array('deny', // deny all users
            'users' => array('*'),
        ),
    );
}

现在只有经过身份验证的用户才能访问该 URL。

我希望它解决了你的问题。

If you simply want to check if the user is a guest and if he is, send him to the login page everytime:

在 config/main.php 中,添加以下内容:

'defaultController' => 'controllerName/actionMethod',

在该控制器中只需添加上述访问规则。现在,默认情况下,您将站点打开到访问控制方法。因此它会自动将您重定向到登录页面。

Even another method

只需将其添加到views/layouts/main.php

<?php 

if(Yii::app()->user->isGuest)
{ 
   $this->redirect('/site/login');
}
?>
于 2013-10-15T09:11:51.393 回答
0
if (Yii::$app->requestedAction->id == "index") {
    //do something
}
于 2016-01-25T10:51:44.787 回答