Я критиковал контроллер
SiteMapController.php
с действием
index
в папке консоли Yii2
и я могу запустить его из командной строки.
Но мне нужно запустить его с контроллера папки backend / controllers. это означает, что я должен запустить действие index контроллера SiteMapController.php из действия внутреннего контроллера Yii2. Вот мой тестовый код, но он не работает.
Бэкэнд / контроллеры / BlogController.php
private function runSiteMapGenerate(){
$cr = new ConsoleRunner(['file' => '@console']);
$cr->run('site-map');
}
Я пробовал оба скрипта
"vova07/yii2-console-runner-extension": "*",
"tebazil/yii2-console-runner": "^0.0.0"
Но это не помогает запустить index
У меня больше нет вариантов.
Найдите каталог yii с помощью chdir
и запустите следующий shell_exec
. Используя это, вы можете упростить его и не устанавливать никаких расширений.
chdir('../yiifolder'); //folder that contains yii
$output = shell_exec('php yii migrate');
var_dump($output);
Это проверено на моем сервере.
Выход:
string 'Yii Migration Tool (based on Yii v2.0.6)
No new migration found. Your system is up-to-date.
' (length=93)
Если вы используете vova07 / yii2-консоль-бегун-расширение, вам нужно установить файл как путь к сценарию yii
, который обычно находится в корневой папке - вы не указываете здесь каталог консоли. Поэтому очень вероятно, что вы создадите объект следующим образом:
// assuming you have file 'yii' in the root directory:
$cr = new ConsoleRunner(['file' => '@app/yii']);
Тогда фактический вызов должен работать:
// assuming that 'index' is the default action
$cr->run('site-map');
// or
$cr->run('site-map/index');
Информация: если консольная команда должна быть выполнена, вы фактически вызываете yii
с некоторыми параметрами для команды. Вы не вызываете команду напрямую. yii
запускает консольное приложение. Просто загляните в этот файл. Он является частью шаблонов проектов yii2-приложение-продвинутый (присутствует, если сценарий init
был выполнен при установке) и yii2-app-basic.