Laravel5.5.26 注册自定义 Artisan 控制台命令

我们经常会用Laravel的artisan命令, 如:

php artisan --version   //laravel版本
php artisan route:list  //路由列表
php artisan make:model  //创建Eloquent模型

等这些命令,那么我们如何注册一个自己的命令呢?

1.首先, 我们要用artisan命令, 创建一个新的命令类

 php artisan make:command myArtisan //创建以后, 默认的命令为:command:name
 php artisan make:command myArtisan --command=my:artisan    //创建以后, 默认的命令为:my:artisan

我们用第二种方法来创建一个命令类, 结果如下:

namespace App\Console\Commands;

use Illuminate\Console\Command;

class myArtisan extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'my:artisan';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        echo 'Hello,myArtisan';
    }
}

2.将命令类的路径添加到app/console/Kernel.php的$command属性里

use App\Console\Commands\myArtisan; //别忘引用一下
protected $commands = [
        myArtisan::class,
    ];

3.执行artisan命令的时候,默认调用handle方法, 我们在handle方法里先输出固定内容:(Hello,myArtisan), 来看下结果

第一步完成,然而,我们创建自定义artisan的时候,肯定要传入参数, 或是一些选项。

4. 为自定义命令类添加参数,和选项

修改myArtisan的$signature属性,

protected $signature = 'my:artisan {name} {--mark=!}'; //name参数为必须,--mark默认为!
protected $signature = 'my:artisan {name?} {--mark=!}';//name参数为可选 ,--mark默认为!
protected $signature = 'my:artisan {name=zhanglong} {--mark=!}'; //name参数默认为zhanglong

在name参数为必须的时候,执行命令会输出:

如果获取参数和选项呢?

获取参数用:$this->argument( ‘name’ ),获取选项用:$this->option( ‘mark’ ),

我们来试一下, 并改一下handle代码

echo 'Hello,myArtisan ' . $this->argument( 'name' ) . ' ' . $this->option( 'mark' );

我们来执行下, 并传参数为:【Aaron】, mark为【~~~】

 

0

发表评论

电子邮件地址不会被公开。