2017-02-28 8 views
0

Ich möchte eine Klasse haben, in der ich alle meine Methoden, die jedes Mal, wenn jemand eine Seite lädt, setzen sollte, lassen Sie es InitRoutines aufrufen.So laden Sie die Klasse bei jedem Laden der Seite in der erweiterten App

In yii2 grundlegende App würde ich so etwas tun. Ich würde der confound-Datei von compontents eine Klasse hinzufügen und sie dem Bootstrap hinzufügen, so einfach.

Aber ich kann nicht herausfinden, wie es in fortgeschrittenen App tun, bevorzugt gemeinsam/config

config.php

$config = [ 
    // .. 
    'components' => [ 
     'InitRoutines' => [ 
      'class' => 'app\commands\InitRoutines', 
     ], 
    ], 
]; 

$config['bootstrap'][] = 'InitRoutines'; 

Und in InitRoutines I init Klasse haben, die alles, was ich laufen brauchen beim Laden der Seite.

InitRoutines.php

namespace app\commands; 

use Yii; 
use yii\base\Component; 
use app\commands\AppHelper; 
use app\commands\Access; 

class InitRoutines extends Component 
{ 
    public function init() 
    { 
     parent::init(); 
     Access::checkForMaintenance(); 
     Yii::$app->language = AppHelper::getUserLanguageCode(); 
    } 
} 

Wie kann ich erreichen, in fortgeschrittener App gleich?

Antwort

0

Ich denke, ich fand die Lösung, ich weiß nicht, ob es richtig ist, aber es scheint zu funktionieren.

config.php

return [ 
    // ... 
    'components' => [ 
     'InitRoutines' => [ 
      'class' => 'common\commands\InitRoutines', 
     ], 
    ], 
    'bootstrap' => [ 
     'log', 
     'common\commands\InitRoutines' 
    ], 
]; 
+0

Betrachten Sie eine benutzerdefinierte 'Controller' Klasse geerbt von' yii \ web \ Controller' zu schaffen. Dann können Sie Ihre Logik in die 'beforeAction' Methode einfügen. – Beowulfenator

+0

@Beowultenator Wenn diese Lösung funktioniert, ist es viel besser als "yii \ web \ Controller" zu erweitern, weil es Ihnen die Arbeit der Änderung der generierten Controller-Deklaration erspart – deacs

+0

@deacs ja, das war der Hauptzweck dieser Lösung – Ripper

Verwandte Themen