Laravel Artisan 命令行:代码里调用命令 1 个改进

问题

除了在终端中执行一个 Artisan 命令,我可以在代码中调用一个 Artisan 命令么(比如,在路由或控制器里触发 Artisan 命令)?

解答

Artisan 门面的 call 方法

要想在代码中调用一个 Artisan 命令,可以使用 Artisan 门面的 call 方法。call 方法的第一个参数接受命令名,第二个参数接受数组形式的命令参数。返回的是命令执行的退出码:

Route::get('/foo', function () {
    $exitCode = Artisan::call('email:send', [
        'user' => 'zhangsan', '--queue' => 'default'
    ]);

});

传递数组值

对于数组参数或数组选项,可以直接传递数组值:

Route::get('/foo', function () {
    $exitCode = Artisan::call('email:send', [
        'user' => ['zhangsan', 'lisi'], '--id' => [5, 13]
    ]);
});

传递布尔值

开关选项可以传入 truefalse,例如,migrate:refresh 命令的 --force 选项:

$exitCode = Artisan::call('migrate:refresh', [
    '--force' => true,
]);

整体传递

在 Laravel 5.8 中,你也可以将整个命令作为字符串传递给 call 方法:

Artisan::call('email:send zhangsan --queue=default');

参考

本文为 Wiki 文章,邀您参与纠错、纰漏和优化
讨论数量: 1

怎么获取command的返回值,比如 route:list

file

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!