laravel中自定义Artisan命令

1 Artisan命令行

Artisan 是 Laravel 自带的命令行接口, 它提供了相当多的命令来帮助你构建 Laravel 应用。 你可以通过 list 命令查看所有可用的 Artisan 命令:

php artisan list

除 Artisan 提供的命令外,你也可以编写自己的自定义命令。命令在多数情况下位于 app/Console/Commands 目录中;不过,只要你的命令可以由 Composer 加载,你就可以自由选择自己的存储位置。如果要创建自己的命令,可以使用以下指令:

php artisan make:command 命令文件
$signature   属性:命令名称
$description 属性:命令描述
handle      方法:命令执行的内容

创建SayCommand.php如下:

namespace App\Console\Commands;

use Illuminate\Console\Command;

class SayCommand extends Command
{
    /**命令名称
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'hello:world';

    /**命令描述
     * The console command description.
     *
     * @var string
     */
    protected $description = '创建 say';

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

    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        //业务逻辑
        echo 'hello world';
    }
}

执行php artisan hello:world会直接输出 hello world

2 Artisan创建文件

如果想要类似于框架提供给我们的类似于创建控制器、模型等文件。我们需要在创建的 command 类中继承 Illuminate\Console\GeneratorCommand 类,与上述执行逻辑不同的是,这里在创建文件时还需要搭配一个模板文件 - 一般以 .stub 作为后缀。

该文件中包含以下内容:
$name 属性:命令名称
$description 属性:命令描述
getStub 方法:生成器/模板 的存根文件
getDefaultNamespace 方法:类的默认名称空间

可以参考 Illuminate\Foundation\Console 目录下的文件。
创建HelloCommand.php如下:

namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;

class HelloCommand extends GeneratorCommand
{
    # 命令名称
    protected $name = 'make:hello';
    # 描述
    protected $description = '创建 hello';
    # 类型
    protected $type = 'Model';

    # 获取模板文件
    protected function getStub()
    {
        return __DIR__ . '/stubs/hello.stub';
    }

    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace . '\Hello';
    }
}

创建app/Console/Commands/stubs/hello.stub如下:

在app/Console/Kernel.php中注册

protected $commands = [
      //
      HelloCommand::class,
];

运行php artisan make:hello Say可以生成Say.php

namespace App\Hello;

class Say
{

}

你可能感兴趣的:(laravel中自定义Artisan命令)