Laravel artisan 以编程方式 运行 带有任何参数但没有密钥的命令

Laravel artisan programmatically running command with any parameter without key

在我的申请中 ,我想在 CLI 之外模拟 php artisan 命令,我在控制器中执行它。

我能拿到运行:

$execute = Artisan::call($commandPart[0], [
        'companyId' => $commandPart[1]
]);

但是,如果我指定它是参数的键,它就可以工作。 同时,我想要实现的是在没有键控参数的情况下传递命令列表,因为我希望它是灵活的。

我试过了,

$execute = Artisan::call($commandPart[0], [
    $commandPart[1]
]);

$command = 'organization:tree_readjust 1';
$execute = Artisan::call($command);

然而这两种情况都会产生错误。 有什么解决办法吗?

先谢谢你了

根据documentation The call method accepts the name of the command as the first argument, and an array of command parameters as the second argument。所以,首先确保 $commandPart[0] 是有效的命令,你可以在第二个参数上传递数组参数。例如:

$command = 'company:delete';
$companyId = 1;
$commandPart = [$command, $companyId];
$execute = Artisan::call($commandPart[0], [
        'companyId' => $commandPart[1]
]);

编辑:

你不能在没有键的情况下调用参数。为了灵活性,我认为您可以创建一些逻辑来制作数组参数并将其传递给 artisan 调用 $execute = Artisan::call($command, $params);

在您的控制器中使用该命令之前,请不要忘记添加 Artisan Facades。

use Illuminate\Support\Facades\Artisan;