CConsoleApplication::setCommandPath() кажется есть баг

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
Stepan Selyuk
Сообщения: 198
Зарегистрирован: 2010.02.03, 05:51
Откуда: Cyprus, Limassol
Контактная информация:

CConsoleApplication::setCommandPath() кажется есть баг

Сообщение Stepan Selyuk »

Допустим создали мы приложение, но его еще не запустили. Есть цель поменять каталог с классами команд.
Если сделать так:

Код: Выделить всё

/* @var $app CConsoleApplication */
$app = Yii::createConsoleApplication($config);
$app->setCommandPath(dirname(__FILE__) . '/protected/commands2');
$app->run();
 
то, приложение все равно обратиться к каталогу по дефолту (скажем, что в конфигурации это не указано). Это происходит, потому что приложение уже прошло инициализацию в init(),
и там была вызвана функция:

Код: Выделить всё

$this->_runner->addCommands($this->getCommandPath()); 
которая заполняет внутренний массив доступных команд.

Поэтому нужно либо добавить строчку

Код: Выделить всё

$this->_runner->addCommands($this->getCommandPath()); 
в функцию $app->setCommandPath(),

либо менять путь так: (опять же повторюсь, можно сменить и в конфигурации, и передать массив на создание приложения, но раз метод есть, он должен работать как надо):

Код: Выделить всё

/* @var $app CConsoleApplication */
$app = Yii::createConsoleApplication($config);
$app->setCommandPath(dirname(__FILE__) . '/protected/commands2');
$app->getCommandRunner()->addCommands($app->getCommandPath());
$app->run();
 
Сначала невидимое, затем видимое. И так у всех программистов :)
Ответить