创建命令类
使用系统自带命令make:command
来创建自定义命令文件:
php artisan make:command WelcomeMessage --command=welcome:message
该命令的第一个参数就是要创建的Artisan命令类名,还可以传递一个选项参数--command
用于自定义该命令的名称。会在 app/Console/Commands
目录下创建一个WelcomeMessage.php
文件:
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class WelcomeMessage extends Command
{
/**
* 命令名称,在控制台执行命令时用到
*
* @var string
*/
protected $signature = 'welcome:message';
/**
* 命令描述
*
* @var string
*/
protected $description = 'print welcome message';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* 命令具体执行逻辑放在这里
*
* @return mixed
*/
public function handle()
{
//
}
}
注册命令类
创建完成后,还需要在app/Console/Kernel.php
中注册才能使用,添加到 $commands
数组中
protected $commands = [
WelcomeMessage::class,
];
参数和选项
参数:必填、可选、默认参数
定义必填参数
make:migration {name}
定义可选参数
在参数名称后面加一个问号:
make:migration {name?}
定义有默认值的参数
make:migration {name=create_user_table}
选项:必须设值、默认值以及缩写
选项和参数相似,但是选项有前缀--
,而且可以在没有值的情况下使用
make:migration {name} {--table}
必须设值
选项后加一个=
make:migration {name} {--table=}
选项设置默认值
make:migration {name} {--table=user}
选项设置缩写
用T
来代表table
make:migration {name} {--T|table}
数组参数和数组选项
不管是参数还是选项,如果你要接收数组作为参数,都要使用*
通配符:
make:migration {name*} {--table=*}
数组参数必须是参数列表中的最后一个参数
描述信息
通过设置命令类的 $description
实现
protected $description = '打印欢迎消息';
可通过php artisan list
命令查看
获取参数和选项
$this->argument()
获取参数值,不带参数返回所有参数值
$this->option()
获取选项值,不带参数返回所有选项值
用户交互
普通文本
$name = $this->ask('你叫什么名字');
敏感信息密码之类
$password = $this->secret('输入密码');
用户确认信息
if($this->confirm('确定要执行此命令吗?'))
{
//继续
}
选项
$city = $this->choice('你来自哪个城市', [
'北京', '杭州', '深圳'
], 0);
输出信息
文本信息
$this->info();
$this->error();
$this->line();
$this->comment();
$this->question();
图表
public function handle()
{
$headers = ['姓名', '城市'];
$data = [
['张三', '北京'],
['李四', '上海']
];
$this->table($headers, $data);
}
输出
基于闭包实现Artisan命令
在routes/console.php
中基于闭包实现:
Artisan::command('welcome:message_simple', function () {
$this->info('欢迎访问 Laravel 学院!');
})->describe('打印欢迎信息');
命令行运行 php artisan welcome:message_simple
运行结果