yii2 - bootstrap - ¿Cómo puedo llamar a un comando de consola en la aplicación web en Yii 2.0
yii2 tutorial (4)
Tengo un comando de consola para generar un informe de usuario. Quiero llamar lo mismo desde mi aplicación web. Estoy usando la versión beta de Yii 2.0.0. Traté de seguir las respuestas dadas en esta publicación ¿Cómo llamar a un comando de consola en la acción de la aplicación web en Yii?
Como la estructura de Yii 2.0 es muy diferente de Yii 1.1, obtengo errores si intento incluir command / userReportController.php. ¿Puede alguien guiarme en esto?
Debe usar una extensión como https://github.com/vova07/yii2-console-runner-extension
yii2-console-runner-extension se sigue cargando.
Prueba esto:
Es yii (sin ext, no yii.bat)
Asegúrese de que la carpeta php se haya agregado a la variable PATH (Windows)
$op = shell_exec ( ''absolute/path/to/yii '' . ''cache/flush-all'' );
/yii/helpers/VarDumper::dump($op, 10, 1);
Salida:
The following cache components were processed:
* cache (yii//caching//FileCache)
usa este código:
$application = new yii/console/Application($config);
$application->runAction(''controller/action'');
Estoy utilizando este método en lugar del comando yii
console, porque estoy ejecutando Yii en VPS administrado donde los comandos de Unix no son compatibles con cron, solo con scripts php.
Para ejecutarlo de esta manera en lugar de consola, la configuración yii debe inicializarse primero, por supuesto:
defined(''YII_DEBUG'') or define(''YII_DEBUG'', true);
defined(''YII_ENV'') or define(''YII_ENV'', ''dev'');
require(__DIR__ . ''/vendor/autoload.php'');
require(__DIR__ . ''/vendor/yiisoft/yii2/Yii.php'');
require(__DIR__ . ''/common/config/bootstrap.php'');
require(__DIR__ . ''/console/config/bootstrap.php'');
$config = yii/helpers/ArrayHelper::merge(
require(__DIR__ . ''/common/config/main.php''),
require(__DIR__ . ''/common/config/main-local.php''),
require(__DIR__ . ''/console/config/main.php''),
require(__DIR__ . ''/console/config/main-local.php'')
);
Creo que esta es la solución más simple:
$controller = new YourConsoleController(Yii::$app->controller->id, Yii::$app);
$controller->actionYourConsoleAction();