2015-02-06 23 views
5

Làm cách nào để có được hành động hiện tại?Yii2 Nhận hành động hiện tại trong bộ điều khiển

Mã này:

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

trả về một lỗi:

PHP Notice – yii\base\ErrorException

Trying to get property of non-object

+0

Bắt action id là đúng. Bạn đang gọi cái này ở đâu? Có vẻ như 'ứng dụng' không được khởi tạo tại thời điểm đó. Ngoài ra, séc phải là 'if (Yii :: $ app-> controller-> action-> id! = 'Lang')'. – arogachev

+0

từ bộ điều khiển, từ hàm init(). Tôi phải thực hiện việc kiểm tra này trên mỗi trang –

+0

Vui lòng thêm mã đầy đủ nơi bạn gọi nó cho câu hỏi. – arogachev

Trả lời

7

Bạn nên sử dụng beforeAction() sự kiện thay vì init().

Bạn cũng có thể chỉ cần sử dụng $this vì nó chứa bộ điều khiển hiện tại.

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

Bạn có nghĩa là '$ this-> action-> id'? – soju

+0

Cảm ơn nhận xét, câu trả lời đã sửa. – arogachev

+1

Cảm ơn! Nó hoạt động! –

0

Bạn có thể lấy id hành động hiện tại bằng cách :)

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

Đó là cách bạn có được id bộ điều khiển, không phải là id hành động. –

+4

bạn có thể nhận được bằng cách sử dụng simpy Yii :: $ app-> controller-> action-> id; –

8

nếu sử dụng Yii2 theo quan điểm - thử điều này: $this->context->action->id;

+0

Điều này hoàn toàn hoạt động. –

Các vấn đề liên quan