它可以做得更简单
$oldApp = \Yii::$app;
new \yii\console\Application([
'id' => 'Command runner',
'basePath' => '@app',
'components' => [
'db' => $oldApp->db,
],
);
\Yii::$app->runAction('migrate/up', ['migrationPath' => '@yii/rbac/migrations/', 'interactive' => false]);
\Yii:$app = $oldApp;
Run Code Online (Sandbox Code Playgroud)
从 Yii2 - 2.0.11.2 高级应用程序开始——这可以工作
首先让我们确保控制器和命名空间正确。在这种情况下,前端应用程序访问控制台应用程序导入方法()
在控制台\控制器\FhirController中
将别名设置为在 console\config\main.php 中可用 [可选]
'aliases' => [
'@common' => dirname(__DIR__),
'@frontend' => dirname(dirname(__DIR__)) . '/frontend',
'@backend' => dirname(dirname(__DIR__)) . '/backend',
'@console' => dirname(dirname(__DIR__)) . '/console',
],
Run Code Online (Sandbox Code Playgroud)
最后从前端视图进行如下调用: 在本例中,调用控制器路由 fhir,然后调用方法 import()
$consoleController = new console\controllers\FhirController('fhir', Yii::$app);
$consoleController->runAction('import');
Run Code Online (Sandbox Code Playgroud)
你可以exec()使用命令 \xc2\xb4\xc2\xb4\xc2\xb4php yii suggest\xc2\xb4\xc2\xb4\xc2\xb4 但这可能会导致网络服务器用户的权限问题。
更好的方法是使用 ConsoleRunner 扩展,例如yii2-console-runner或yii2-console-runner-extension,它们可以使作业控制工作更复杂、更安全popen().
执行时始终注意代码注入exec()等!