gpt4 book ai didi

php - 从 Laravel 作业调用 Laravel 命令

转载 作者:可可西里 更新时间:2023-11-01 01:11:19 26 4
gpt4 key购买 nike

我有一个名为 MyCommand 的命令,我从一个名为 MyJob 的作业中调用它。从作业调用时,我看不到命令​​输出。但是,如果我直接从命令行运行该命令,则会看到命令输出。

MyCommand.php代码:

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MyCommand extends Command
{

protected $signature = 'mycommand:doit';

public function __construct()
{
parent::__construct();
}

public function handle()
{
$this->info('Process started');

//Some process is done here

$this->info('Process completed');
}
}

MyJob.php代码:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Artisan;

class MyJob implements ShouldQueue
{
public function __construct()
{

}

public function handle()
{
Artisan::call('mycommand:doit');
}
}

最佳答案

从理论上讲,您在运行作业时不在终端中(例如,作业可能正在排队或安排),在终端外运行时不会保存输出。

但是,您仍然可以使用 Artisan::output() 获取输出缓冲区;

例子:

namespace App\Jobs;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Bus\Dispatchable;
use Illuminate\Support\Facades\Artisan;

class MyJob implements ShouldQueue
{
public function __construct()
{

}

public function handle()
{
Artisan::call('mycommand:doit');
$output = Artisan::output(); // $output is a string

// Do whatever you want with $output
}
}

更新:同步输出

你可以试试这个:命令示例:

class SlowCommand extends Command
{
protected $signature = "slow";


public function handle()
{
$max = 10;

for ($i = 0; $i < $max; $i++) {
$this->line($i);
sleep(1);
}
}
}
// Synchronous output
Artisan::call("slow");
echo Artisan::output();

// Asynchronous output
$buffer = new ConsoleOutput();
Artisan::call("slow", [], $buffer);

关于php - 从 Laravel 作业调用 Laravel 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56358463/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com