Добрый день!
Возможно вопрос нубский, но я что то потерялся. Даже не знаю как его гуглу сформулировать.
Есть проект на Yii2 на advanced-шаблоне. Во frontend есть модули с пространством имен:
namespace app\modules\<имя модуля>\...;
Необходимо по cron'у пробегаться по модулям и вызывать actionCron из контроллера если он реализован. Так как wget'ом вызывать такие экшены опасно (лимит в 30 секунд), то в console создан CronController со всеми вытекающими типа namespace console\controllers. controllerMap (для вызова через run()) использовать не хотелось бы, так как заранее неизвестен набор модулей. Прибегнул к такому трюку:
public function actionExec()
{
$plugins = \common\models\Plugins::find()->all();
foreach ($plugins as $plugin) {
$controller = 'frontend\\modules\\' . $plugin->name . '\\controllers\\CronController';
if (class_exists($controller))
{
$obj = new $controller($plugin->name, $plugin->name);
$result = $obj->actionIndex($plugin);
};
}
}
Вызовы проходят, но вот внутренние обращения к моделям, имеющим app\modules\... в качестве namespace выдают:
PHP Fatal Error 'yii\base\ErrorException' with message 'Class 'app\modules\events\models\EventsUser' not found'
Так не хочется менять все app на frontend...
Вопрос: Можно ли заставить консольное приложение думать, что app - это frontend? Или я где то кардинально ошибся?