2017-02-11 5 views
0

Мне нужно изменить соединение db (префикс) маршрутизации, Когда пользовательский маршрут к системе site.com/db1/post использует конфигурацию компонентов db1 и когда используется система route to site.com/db2/post db2YII2. Изменение соединения db путем маршрутизации

'components' => [ 
'db1' => [ 
    ..., 
    'tablePrefix' => 'base1_', 
], 
'db2' => [ 
    ..., 
    'tablePrefix' => 'base2_', 
], 
... 

Возможно ли это? Возможно, есть лучшее решение для изменения префикса db. мне нужно использовать одну модель с другой таблицей (только изменения префикса)

ответ

0

есть несколько вариантов. Вероятно, самым простым является использование правил URL; см http://www.yiiframework.com/doc-2.0/guide-runtime-routing.html#url-rules

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

Это будет перенаправлять db1/запись на сайте/сообщение с параметром "DB" установлен в положение "DB1". Затем в 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 
} 

В вашем классе модели, вам нужно будет переопределить getDb() статический метод, и написать метод setDb:

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

Благодаря ФОТ ответ! Я забыл, что у меня слишком много контроллеров. Я использую другой способ путем изменения Пользователь и для каждого пользователя делает ваше соединение db. –

0

Простым решение схоже на продвинутый шаблоне .. где у вас есть два разных приложения с другим разделом конфигурации .. в

/db1/config/main.php 

вы можете поместить компонент дб выставиться для доступа к таблице префиксов вы предпочитаете (или также в базу данных вы предпочитаете)

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

и в

/db2/config/main.php 

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

Вы можете использовать общее пространство имен для все общего elemnts приложений вам нужно .. модель, контроллеры, мнение и так .. на
и каждое пространство имен для, неточности конкретных элементов ..

Obviuosly этого isjust предложения .. может быть есть и другие простые и умные решения

PS: с помощью двух отдельных баз данных, вам не нужно другой префикс ..

Смежные вопросы