如何在yii2中从web运行控制台命令

sar*_*rma 9 php shell console cron yii2

我已经创建了一个控制台命令console/controllersSuggestionController.

如果我运行命令php yii suggestions,它的工作.

我想知道如何在没有任何扩展名的情况下从web执行console命令yii2.

Mak*_*hin 7

它可以做得更简单

$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)

Github LINK


Gaj*_*ara 5

从 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)


WeS*_*See 1

你可以exec()使用命令 \xc2\xb4\xc2\xb4\xc2\xb4php yii suggest\xc2\xb4\xc2\xb4\xc2\xb4 但这可能会导致网络服务器用户的权限问题。

\n\n

更好的方法是使用 ConsoleRunner 扩展,例如yii2-console-runneryii2-console-runner-extension,它们可以使作业控制工作更复杂、更安全popen().

\n\n

执行时始终注意代码注入exec()等!

\n