目录: app/Console/Commands/*
1,原始使用方法
# 进入项目目录:
cd /home/www/lv_dapi_tingjunapp
# 查看所有命令:
php artisan list
# 执行某一命令
php artisan command:name --option=foo
# 新增命令
php artisan make:command Init/TestInitCommand --command="init:test"
# 在 Console/Commands/ 目录下 编辑刚才生成的 Init/TestInitCommand 文件
# handle 方法写具体逻辑
# 尽可能的记录 command 日志
$data = array_merge($this->arguments(), $this->getOptions());
Log::channel('command')
->info( "[COMMAND-HDL] " . __CLASS__ . " : " . json_encode($data));
# 在代码中 service 或其他地方 调用 artisan 命令使用如下:
// 同步执行,会等待结果返回
Artisan::call('command:name', ['--option' => 'foo']);
// 异步执行,使用队列,无需等待结果返回
Artisan::queue('command:name', ['--option' => 'foo']);
# 在命令行直接执行刚才新增的命令
php artisan init:test
2,封装后使用方法
其他不变,需要统一继承 BaseCommand
特性:
- 自动记录日志,无需手动记录日志了;
- 在Controller目录下的,命令统一带上 controller: 前缀;
- 类名后缀统一定为 Command;
- 逻辑处理方法统一为 handler (原handle),若有多个action 方法则不写handler;
- 派发方式与 job , event 一样了(默认使用queue,也可加第二个参数设为 sync)。
注意:需要传 action 和 json 节点,对应command里具体的方法和参数。
也可以通过 App\Common\Libs\Dispatch\Console 调用(推荐):
/**
* 异步执行命令行保存文件记录
* @param $data
* @return bool
*/
private function saveLibraryFile($data)
{
Console::getInstance(LibraryFileCommand::class)
->push($data, GlobalConsoleConst::LIB_FILE_CREATE);
return true;
}