获取Yii2引导组件中的控制器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

我想在作为引导组件的组件中获取控制器id及其操作,但组件运行时,
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,因为您正处于引导阶段,此时控制器实例还不可用。。