2015-02-06 69 views
5

如何获得当前操作?Yii2在控制器中获取当前操作

此代码:

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

返回一个错误:

PHP Notice – yii\base\ErrorException

Trying to get property of non-object

+0

获取活动ID是正确的。你在哪里打电话?看起来像'应用程序'在那个时候没有初始化。此外,检查应该是'if(Yii :: $ app-> controller-> action-> id!='lang')'。从init()函数获取来自控制器的 – arogachev 2015-02-06 05:16:29

+0

。我必须在每个页面上做这个检查 – 2015-02-06 05:33:09

+0

请在你提到问题的地方添加完整的代码。 – arogachev 2015-02-06 05:33:33

回答

7

,您应该使用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; 
    } 
} 
+2

你的意思是'$ this-> action-> id'? – soju 2015-02-06 14:07:59

+0

感谢您的评论,更正了答案。 – arogachev 2015-02-06 15:47:42

+1

谢谢!有用! – 2015-02-06 16:09:23

0

您可以通过:)

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

这就是你如何得到控制器ID,而不是操作ID。 – 2016-11-14 23:21:52

+4

你可以通过使用simpy Yii :: $ app-> controller-> action-> id; – 2016-11-15 09:18:19

8

获得当前活动ID,如果使用Yii2鉴于 - 试试这个: $this->context->action->id;

+0

这完全有效。 – 2016-11-14 23:28:43

相关问题