创建模板stub

建一个stub模板,用于下面使用

在resources下新建stubs目录用于存储
新建一个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类型的下载器

array类型测试

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


ok,就酱

`

Q.E.D.


_____________煎和熬都是变美味的方式,加油也是_____________