Я новичок в разработке оболочки в Cake. Проблема, с которой я сталкиваюсь, заключается в настройке источника данных в самом скрипте. Моя база данных.php есть;
function __construct()
{
if(getenv('ENVIRONMENT') == 'staging') {
$this->default = $this->staging;
} else {
$this->default = $this->production;
}
}
Итак, я настраиваю базу данных на основе настроек среды веб-сервера. Естественно, php-cli не может получить доступ к этой переменной. В итоге я создаю задачу оболочки CakePHP.
class SelectEnvTask extends Shell {
public function execute()
{
App::Import('ConnectionManager', 'Model');
$configs = ConnectionManager::enumConnectionObjects();
if (!is_array($configs) || empty($configs)) {
$this->out('Error! No database configuration has been found.');
}
$connections = array_keys($configs);
if(!isset($this->args[0])) {
$this->out('Error! Please enter one of the environment settings as an argument: ' . implode('/', $connections) .
"\n\n" . 'eg. ./Console/cake *script_name* *environment*', 2);
exit(1);
}
if(!in_array($this->args[0], $connections)) {
$this->out($this->args[0] . ' environment could not be found!', 2);
exit(1);
}
//hacky solution until finding a better one
$models = App::objects('Model');
foreach($models as $model) {
ClassRegistry::init($model)->setDataSource($this->args[0]);
}
}
}
Это работает правильно, однако, как вы видите в приведенной ниже задаче, я получаю все названия моделей и меняю их соединение с БД, что не является хорошей практикой. Я также не хочу устанавливать больше переменных в класс базы данных и хотел бы обрабатывать их в оболочках / задачах.
Есть ли более элегантный способ добиться этого?
Спасибо