Я работаю над небольшим приложением CakePHP, на которое наложено следующее ограничение (неудобно, но вне моего контроля): мне нужно, чтобы оно работало с любой из двух идентичных баз данных, причем выбор основан на URL.Например:
http://www.example.com/myapp/foo/action/param
http://www.example.com/myapp/bar/action/param
Первое очевидное решение состоит в том, чтобы иметь два идентичных приложения CakePHP в myapp/foo
и myapp/bar
с различными конфигурациями базы данных.Однако это выглядит глупо, поэтому я пытаюсь найти элегантный способ создания одного приложения.
Подход, который я рассматриваю, заключается в следующем: определить маршруты так, чтобы myapp/foo
и myapp/bar
будет связано с тем же контроллером.Затем дайте моему классу DATABASE_CONFIG
конструктор:
function __construct() {
$pathParts = explode('/', $_SERVER['REQUEST_URI']);
if (array_search('foo', $pathParts)) {
$this->default = $this->fooConfig;
} else if (array_search('bar', $pathParts)) {
$this->default = $this->barConfig;
}
}
(где, конечно, я определил fooConfig
и barConfig
для двух баз данных.) У меня есть контроль над URL, поэтому ямогу быть уверен, что в URL не будет посторонних вхождений foo
или bar
.
Мой вопрос таков: есть ли более простой и элегантный способ справиться с этой странной ситуацией?Может быть, что-то в AppModel
и / или AppController
?Хотя я избавляюсь от дублированного кода, я не могу избавиться от ощущения, что заменяю один запах кода другим.