获取Yii2引导组件中的控制器id
我想在作为引导组件的组件中获取控制器id及其操作,但组件运行时,获取Yii2引导组件中的控制器id,yii,yii2,yii-extensions,yii-components,Yii,Yii2,Yii Extensions,Yii Components,我想在作为引导组件的组件中获取控制器id及其操作,但组件运行时,Yii::$app->controller为空,我认为这是由于在控制器运行之前运行 如何在我的引导组件中获取控制器id 或者是否有其他方法在任何控制器之后运行任务? 组件文件: namespace common\components; use yii; use common\models\Statistic; class ActivityLogs extends \yii\base\Component { public
Yii::$app->controller
为空,我认为这是由于在控制器运行之前运行
如何在我的引导组件中获取控制器id
或者是否有其他方法在任何控制器之后运行任务?
组件文件:
namespace common\components;
use yii;
use common\models\Statistic;
class ActivityLogs extends \yii\base\Component
{
public function init() {
Yii::error(Yii::$app->controller->id);
// Yii::$app->controller is null
parent::init();
}
}
配置文件:
'bootstrap' => ['log', 'ActivityLogs'],
'controllerNamespace' => 'frontend\controllers',
'components' => [
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
],
'ActivityLogs'=>[
'class' => 'common\components\ActivityLogs'
],
谢谢。我认为是空的,因为您正处于引导阶段,此时控制器实例还不可用 我建议您不要在init()函数中执行此操作
但是,当应用程序启动阶段终止时,您可以使用适当的activityLogs静态函数。然后正确定义控制器。我提到控制器为空,因此控制器->id抛出一个试图获取非对象错误属性的错误。我可以在应用程序中的任何位置获取控制器id,但不能在组件体中获取。只需添加if语句,检查Yii::$app->controller是否为对象,然后执行所需的操作。虽然您必须在init()之外的其他位置执行此操作,因为它仅在应用程序初始化期间在未分配控制器的情况下启动。很抱歉,我不理解您的问题..您可以发布示例或相关代码吗。。哪个控制器?我添加了一些额外的信息:)@scaisEdgeI找不到关于Yii::error.的信息。。我知道Yii::Yii\base\Model中的错误。。请给我解释一下……我的问题是Yii::$app->controller为空。你知道为什么吗@scaisEdgeI认为为null,因为您正处于引导阶段,此时控制器实例还不可用。。