学习Laravel自定义Artisan命令

创建命令类

使用系统自带命令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

运行结果

猜你喜欢

转载自www.cnblogs.com/bigcola/p/13365870.html