Php 在Yii中获取当前控制器和操作id
我想强制所有用户在访问我的站点页面之前登录。我遵循了拉里·厄尔曼的教程 根据本教程,您可以为某些页面设置例外,以避免重定向到登录页面。为了检查当前控制器,它已检查了Php 在Yii中获取当前控制器和操作id,php,yii,yii1.x,Php,Yii,Yii1.x,我想强制所有用户在访问我的站点页面之前登录。我遵循了拉里·厄尔曼的教程 根据本教程,您可以为某些页面设置例外,以避免重定向到登录页面。为了检查当前控制器,它已检查了$\u GET值。我的问题是我使用了urlManager来重写URL,而$\u GET给了我一个空值。有什么方法可以让我在课堂成绩中得到当前的控制器和动作吗 我尝试了以下操作,但在我的组件类的范围内无法访问: Yii::app()->controller->getId 您是否尝试过: Yii::app()->con
$\u GET
值。我的问题是我使用了urlManager
来重写URL,而$\u GET
给了我一个空值。有什么方法可以让我在课堂成绩中得到当前的控制器和动作吗
我尝试了以下操作,但在我的组件类的范围内无法访问:
Yii::app()->controller->getId
您是否尝试过:
Yii::app()->controller->id
以及:
?尝试
Yii::app()->controller->getRoute()
如果我正确回答了你的问题,你基本上是在试图阻止对控制器中某些操作的访问而没有登录,对吗
如果这是您所追求的,正确的方法是:
actionMethod()
,如下所示:
class SomeController extends CController{
public function actionSomeAction(){
... More code...
}
/**
* @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('*'),
),
);
}
class SomeController extends CController{
public function actionSomeAction(){
... More code...
}
/**
* @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
我希望它解决了你的问题
如果您只是想检查用户是否是客人,并且他是客人,请每次都将他发送到登录页面:
在config/main.php中,添加以下内容:
'defaultController' => 'controllerName/actionMethod',
在该控制器中,只需添加上述访问规则。现在,默认情况下,您将使用访问控制方法打开站点。因此,它会自动将您重定向到登录页面
甚至还有另一种方法
:
只需将其添加到views/layouts/main.php中
是您可以通过反转
urlManager
规则获得当前的控制器/操作
路线:
Yii::app()->urlManager->parseUrl(Yii::app()->request)
使用Yii2,获取当前控制器对象,包括:
Yii::$app->controller
从控制器中,使用以下命令以字符串形式获取当前操作:
Yii::$app->controller->action->id
与现在的Yii2一样 获取当前
控制器名称
Yii::$app->controller->id
当前控制器对象
Yii::$app->controller
当前操作名称
:
Yii::$app->controller->action->id
当前路线
:
Yii::$app->requestedRoute
在Yii2中:
调用Yii::$app->controller->id
的问题是,当您在某处调用它时(例如:在顶级抽象控制器中),Yii::$app->controller
可能尚未实例化,因此它将返回错误
只需直接调用urlManager
将请求映射到路由:
var_dump(Yii::$app->urlManager->parseRequest(Yii::$app->request))
我得到了这个错误:在Yii2:
Yii::$app->controller->getRoute()上调用非对象的成员函数getRoute()
它不起作用。Yii::app()->controller返回nulltry Yii::$app->controller->id@Ruben它只能在Yii2中工作!在Yii1中,app
是一个方法,而不是Yii
类的变量。唯一的工作方式是在Yii1中调用Yii::app()
。对于yii2,请使用Yii::$app->controller->id
非常感谢,但我不想为每个控制器编写访问规则。我只想检查一下用户是否是guest,然后将其重定向到登录页面。但是除了我上面解释的场景之外,我正在尝试找到如何在使用urlManager重写URL时访问控制器和操作ID。我已经编辑了我的帖子。也许它现在应该对你有帮助。如果是的话,请别忘了投赞成票,并把它作为答案:)非常感谢。我得到了答案。这正是我想要的。非常感谢。请注意,加载索引页时,即http://localhost/yiiapp/
因为URL中没有请求@korcholis's是使其适用于所有操作(无论是否索引)的最佳方法。简单而快速:Yii::$app->requestedRoute请不要仅用代码回答,并解释您的答案与现有(长期)其他答案的区别。对于Yii2,它类似:Yii::$app->controller->id
,Yii::$app->controller->action->id
是的,这也适用于模块上下文,例如:admin/permission/index
顺便说一句,Yii:$app->request->resolve()[0]
用于在请求事件之前获取路由,而其他人当时无法获取。这就是我要找的@NickTsai。非常感谢。
if (Yii::$app->requestedAction->id == "index") {
//do something
}