【问题标题】:Yii2 Get current action in controllerYii2 获取控制器中的当前动作
【发布时间】:2015-02-06 05:07:59
【问题描述】:

如何获取当前操作?

这段代码:

if (!Yii::$app->controller->action->id == 'lang') {
    Url::remember();
}

返回错误:

PHP 通知 – yii\base\ErrorException

试图获取非对象的属性

【问题讨论】:

  • 获取操作 ID 是正确的。你在哪里称呼这个?似乎application 在那一刻没有初始化。支票也应该是if (Yii::$app->controller->action->id != 'lang')
  • 来自控制器,来自 init() 函数。我必须在每一页上做这个检查
  • 请将您调用它的完整代码添加到问题中。

标签: yii2


【解决方案1】:

您应该使用beforeAction() 事件而不是init()

您也可以简单地使用$this,因为它包含当前控制器。

public function beforeAction($action)
{
    if (parent::beforeAction($action)) {
        if ($this->action->id == 'lang') {
            Url::remember();
        }

        return true; // or false if needed
    } else {
        return false;
    }
}

【讨论】:

  • 你的意思是$this->action->id
【解决方案2】:

如果在视图中使用 Yii2 - 试试这个: $this->context->action->id;

【讨论】:

    【解决方案3】:

    您可以通过以下方式获取当前操作名称:

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

    并用这个获取控制器名称:

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

    注意:请记住,这些仅在应用程序初始化后才起作用。可能的用途:inside a controller action/ inside a modelinside a view

    参考:Class yii\web\Controller

    【讨论】:

      【解决方案4】:

      您可以通过 :) 获取当前操作 id

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

      【讨论】:

      • 这是获取控制器 ID 而非操作 ID 的方式。
      • 你可以通过使用simpy Yii::$app->controller->action->id;
      猜你喜欢
      • 1970-01-01
      • 2017-05-04
      • 1970-01-01
      • 2011-05-19
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 2020-06-11
      • 1970-01-01
      相关资源
      最近更新 更多