2015-02-06 20 views
5

Come posso ottenere un'azione corrente?Yii2 Ottieni azione corrente nel controller

Questo codice:

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

restituisce un errore:

PHP Notice – yii\base\ErrorException

Trying to get property of non-object

+0

Ottenere azione id è corretta. Dove stai chiamando questo? Sembra che 'application' non sia inizializzato in quel momento. Anche il controllo dovrebbe essere 'if (Yii :: $ app-> controller-> action-> id! = 'Lang')'. – arogachev

+0

dal controller, dalla funzione init(). Devo fare questo controllo su ogni pagina –

+0

Per favore aggiungi il codice completo dove lo chiami alla domanda. – arogachev

risposta

7

Si dovrebbe usare beforeAction() evento invece di init().

Inoltre, è possibile utilizzare semplicemente $this perché contiene il controller corrente.

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

Vuoi dire '$ this-> action-> id'? – soju

+0

Grazie per l'osservazione, risposta corretta. – arogachev

+1

Grazie! Funziona! –

0

È possibile ottenere corrente id azione :)

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

Ecco come si ottiene l'id del controller, non l'ID azione. –

+4

puoi ottenere usando simpy Yii :: $ app-> controller-> action-> id; –

8

se l'uso Yii2 in vista - provate questo: $this->context->action->id;

+0

Questo funziona completamente. –

Problemi correlati