我想强制所有用户在访问我的网站页面之前登录。我已经关注了Larry Ullman的教程Forcing Login for All Pages in Yii。
根据教程,您可以对某些页面进行例外处理,以避免重定向到登录页面。为了检查当前控制器,它检查了$_GET
值。我的问题是我使用urlManager
重写了URL,$_GET
给了我一个空值。我可以使用任何方法来获得当前控制器和动作的分数吗?
我尝试了以下内容,但在组件类的范围内无法访问它:
Yii::app()->controller->getId
答案 0 :(得分:45)
是的,您可以通过撤消controller/action
规则来获取当前的urlManager
路线:
Yii::app()->urlManager->parseUrl(Yii::app()->request)
答案 1 :(得分:44)
你有没有尝试过:
Yii::app()->controller->id
和
Yii::app()->controller->action->id
答案 2 :(得分:16)
现在在Yii2
获取最新controller name
Yii::$app->controller->id
当前controller object
Yii::$app->controller
当前action name
:
Yii::$app->controller->action->id
当前route
:
Yii::$app->requestedRoute
答案 3 :(得分:11)
使用Yii2,获取当前控制器对象:
Yii::$app->controller
从控制器,使用以下命令获取当前操作:
Yii::$app->controller->action->id
答案 4 :(得分:8)
在Yii2:
调用Yii::$app->controller->id
的问题是,当你在某个地方调用它时(例如:在你的一个顶层抽象控制器中),Yii::$app->controller
可能尚未实例化,因此它将返回错误。
直接调用urlManager
将请求映射到路由:
var_dump(Yii::$app->urlManager->parseRequest(Yii::$app->request))
答案 5 :(得分:4)
尝试Yii::app()->controller->getRoute()
答案 6 :(得分:4)
如果我对您提出正确的问题,您基本上是在尝试停止访问控制器中的某些操作而无法正确登录?
如果这是你所追求的,那么正确的方法就是:
在控制器中设置actionMethod()
,如下所示:
class SomeController extends CController{
public function actionSomeAction(){
... More code...
}
之后,您可以使用以下命令访问该网站:path / to / application / controllerName / actionName
像这样制作访问控制:
/**
* @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('*'),
),
);
}
现在只有经过身份验证的用户才能访问该网址。
我希望它能解决你的问题。
<强> 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');
}
?>
答案 7 :(得分:0)
if (Yii::$app->requestedAction->id == "index") {
//do something
}