2017-02-11 3 views
0

Ich muss Db-Verbindung (Präfix) durch Routing ändern, Wenn Benutzer Route zu Site.com/db1/post System verwendet db1 Komponenten Config, und wenn Route zu site.com/db2/post System verwendet db2YII2. Change Db Verbindung durch Routing

Kann es möglich sein? Vielleicht haben Sie eine bessere Lösung, DB-Präfix zu ändern. Ich brauche ein Modell mit verschiedener Tabelle zu verwenden (nur Präfix ändern)

Antwort

0

Es gibt ein paar Optionen. Wahrscheinlich am einfachsten ist die Verwendung von URL-Regeln; siehe http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#url-rules

rules => [ 
    '<db:db\d>/post' => 'site/post', 
] 

Dies wird db1/Post site/Post mit dem "db" Parameter umleiten auf "DB1". Dann in Ihrem SiteController:

public function actionPost($db) { 
    YourModel::setDb(Yii::$app->$db); 
    $model = new YourModel(); 
    // do what you need with your model 
    // and return the rendered result 
} 

In Ihrer Modellklasse, müssen Sie das getDb() statische Methode außer Kraft zu setzen, und schreiben Sie eine setdb Methode:

private static $_db; 

public static function getDb() { 
    if (isset(self::$_db)) { 
     return self::$_db; 
    } 
    return ActiveRecord::getDb(); 
} 

public static function setDb($db) { 
    self::$_db = $db; 
} 
+0

Dank fot Antwort! Ich habe vergessen, dass ich zu viele Controller habe. Ich benutze einen anderen Weg, um Benutzer zu ändern und für jeden Benutzer Ihre db-Verbindung zu machen. –

0

Eine einfache Lösung in der vorgeschobenen Vorlage ähnlich ist .. wo Sie zwei unterschiedliche Anwendung mit unterschiedlichen Konfigurations Abschnitt haben .. in

/db1/config/main.php 

Sie können die DB-Komponente für den Zugriff auf die Tabelle Präfix Sie bevorzugen (oder auch Datenbank bevorzugen Sie)

'components' => [ 
    'db' => [ 
..., 
    'tablePrefix' => 'base1_', 
    ], 

und in

gefassten platzieren
/db2/config/main.php 

'components' => [ 
    'db' => [ 
..., 
    'tablePrefix' => 'base2_', 
    ], 

können Sie den gemeinsamen Namespace für alle gängig Anwendungs ​​elemnts Sie benötigen .. Modelle, Controller, Ansichten und so .. auf
und jeden reservierten Namensraum für bestimmte Elemente ..

Obviuosly dieser isjust einen Vorschlag .. könnte sein, es gibt andere, einfache und intelligente Lösungen

PS: die Verwendung von zwei getrennter Datenbank, die Sie nicht anderen Präfix benötigen ..