С некоторых пор я разрабатываю сайт, который в дальнейшем необходимо было расширить на еще одну страну. Так как не было времени осуществлять гибкость первоначального варианта для поддержки нескольких стран, пришлось просто скопировать веб-приложение в новую папку /ua/
Таким образом получилась ситуация, что информацияи конфигурация на этих двух сайтах практически одинаковая, за исключением некоторых параметров, а именно: валюта, некоторые абзацы и подключение к БД.
Сейчас я решил начать изучение фреймворка Yii и переписать данный проект, но сделать его гибким, чтобы можно было безболезненно добавлять все новые и новые конфиги для разных стран.
Я почти все продумал, как это можно сделать, но именно сейчас меня интересует то, как мне обеспечить подключение к нужной базе.
Я уже читал статьи про динамический выбор конфига, а также про использование нескольких БД в одном проекте, но это не совсем то, что мне нужно.
Сейчас постараюсь объяснить, как хочу это реализовать.
Как вариант:
Код: Выделить всё
//config/main.php
'db_ru' => array(
'connectionString' =>
'mysql:host=localhost;dbname=db_ru',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
'db_ua' => array(
'connectionString' =>
'mysql:host=localhost;dbname=db_ua',
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
Код: Выделить всё
//config/main.php
'db_ru' => array(
'connectionString' => array(
'ru' => 'mysql:host=localhost;dbname=db_ru',
'ua' => 'mysql:host=localhost;dbname=db_ua'
),
'emulatePrepare' => true,
'username' => 'root',
'password' => '',
'charset' => 'utf8',
),
По этому пути я сейчас и иду.
Я переопределил класс CUrlManager, и теперь в функции init() он динамически формирует правила разбора вида:
'<lang:(язык1|язык2|...)>(/)?<uri:(.*)>' => '<uri>'
И по-хорошему, когда я обращусь к своей БД первый раз, то переопределенный класс CDbConnection и узнает из $_GET['lang'], какую базу мне включить. Но тут у меня возник такой вопрос, а что будет если я обращусь к БД раньше, чем УРЛ успеет распарситься?
И собственно мой вопрос состоит в том, как мне сделать так, чтобы при первом обращении к БД, переопределенный класс смотрел - распарсилась ли уже УРЛ, либо нужно распарсить ее?
Пока предметная область (Yii framework) мною не очень хорошо понята и изучена, поэтому я бы хотел выслушать конструктивную критику и предложения.
Мне кажется нужно смотреть на события