2016-04-04 1 views
2

Ich versuche, jeden Controller Aktionen durch denselben Code zu protokollieren:Yii2: Wie Controller und Action ID für jede Anfrage zu protokollieren?

public function afterAction($action, $result) 
{ 
    \Yii::$app->logger->write(0, $action->controller->id, $action->id); 
    return parent::afterAction($action, $result); 
} 

Aber, ich will auf jedem Controller diese Methode nicht neu deklarieren, und ich will nicht, einige Basen mit derselben Methode verwenden. Ich weiß, Base/Controller hat AfterAction Event, aber wie Controller-Aktionen zu protokollieren, mit seinem Event-Handler?

+1

Warum nicht einfach ein Protokollziel mit ?? http://www.yiiframework.com/doc-2.0/guide-runtime-logging.html – soju

+0

Es wird wie eine einfache Geschichte der Aktionen des Benutzers aussehen. Logger ist eine einfache Komponente, die mit dem Protokoll-AR-Modell arbeitet. Methode schreiben speichert Modell. –

Antwort

1

Sie können eine Class-Level Event Handler in den boostrap Prozess wie folgt aus (höchstwahrscheinlich in der web.php Konfigurationsdatei, die das configuration for the application Objekt hält) erstellen:

use yii\base\ActionEvent; 
use yii\base\Controller; 
use yii\base\Event; 

$config = [ 
    ... 
    'bootstrap' => [ 
     ... 
     function() { 
      Event::on(Controller::className(), Controller::EVENT_AFTER_ACTION, function (ActionEvent $event) { 
       Yii::info('Called controller/action: ' . $event->action->id . '/' . $event->action->controller->id); 
      }); 
     }, 
     ... 
    ], 
    ... 
]; 
Verwandte Themen