使用stub快速生成自定义文件

创建模板stub

建一个stub模板(这里拿项目里的下载中心举个栗子),用于下面使用

在resources下新建stubs目录用于存储stub文件
新建一个文件并命名为query-download.stub

<?php

namespace DummyNamespace;

use App\Exports\QueryExport;

class DummyClass extends QueryExport
{

    public function headings(): array
    {
        //表头
         return [
             //
         ];
    }

    public function columns($row): array
    {
        //每一列的数据
         return [
             //
         ];
    }

    public function stringColumns(): array
    {
        //要转为字符串的列标
         return [
            //
         ];
    }

}

stub占位符介绍

stub文件中会有很多占位符,下面说几个,还有很多占位符,后面再熟悉一下

  • DummyNamespace : 命名空间
  • DummyRootNamespace : 根命名空间
  • DummyClass : 类名

创建command命令

 php artisan make:command Make/Download

生成好的新的command,需要如下操作

  • 修改继承GeneratorCommand类并必须实现getStub方法
  • 移除自动生成的protected $signature改为protected $name,其中$name就是最后要执行的命令了

下面直接上代码

<?php

namespace App\Console\Commands\Make;

use Illuminate\Console\GeneratorCommand;
use Symfony\Component\Console\Input\InputOption;

class Download extends GeneratorCommand
{
    /**
     * 运行的命令
     *
     * @var string
     */
    protected $name = 'make:download';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = '生成下载中心';

    /**
     * 这里是声明生成的文件类型,在新建成功时,命令行会显示xxx created successfully.这里的xxx在这就是Download
     *
     * @var string
     */
    protected $type = 'Download';


    /**
     * 文件模板的地址,这里就是第一步新建的stub文件的路径
     * @return string
     */
    public function getStub(): string
    {
        if ($this->option('array')) {
            return base_path('resources/stubs/array-download.stub');
        }else{
            return base_path('resources/stubs/query-download.stub');
        }
    }

    /**
     * 获取文件的默认的命名空间,因为文件打算建立在app下的Exports目录下,所以修改了一下这个文件,若要生成在app下,可不重写此方法
     * Get the default namespace for the class.
     *
     * @param  string  $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace): string
    {
        return $rootNamespace . '\Exports';
    }

    /**
     * 定义可输入的参数
     * Get the console command options.
     *
     * @return array
     */
    protected function getOptions()
    {
        return [
            //VALUE_NONE 不接受选项的输入,默认值
            //VALUE_REQUIRED 必须传入一个值
            //VALUE_OPTIONAL 可以传值也可以不传值
            //VALUE_IS_ARRAY 可以传多个值 --dir=/foo --dir=/bar
            //VALUE_NEGATABLE 可以正值也可以负值
            ['query', '', InputOption::VALUE_NONE, 'Generate an export for a query.'],
            ['array', 'a', InputOption::VALUE_NONE, 'Generate an export for an array.']
        ];
    }
}

其他可用方法

    protected function buildClass($name)
    {
        //可以根据传入的参数,自定义其他操作
    }


    protected function replaceNamespace(&$stub, $name)
    {
       //可以修改底层占位符和自定义占位符
    }

使用

query类型测试

执行生成命令,生成query类型的下载器

使用stub快速生成自定义文件

使用stub快速生成自定义文件

array类型测试

执行生成命令,生成array类型的下载器

使用stub快速生成自定义文件

使用stub快速生成自定义文件

ok,就酱

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!