gpt4 book ai didi

php - 创建用于生成自定义类或文件的 artisan 命令

转载 作者:可可西里 更新时间:2023-11-01 12:26:03 30 4
gpt4 key购买 nike

创建用于生成自定义类或文件的 artisan 命令的最佳方法(或者可能是实际完成的方法)是什么?就像 php artisan make:console 本身一样,它为我们的新 artisan 命令创建了一个 php 类。

据我所知,我们有两个选择:

  • 使用 php heredoc(或新命令的类文件中的任何字符串)为新文件添加模板,这真的很麻烦。

  • 在某处放置一个模板文件,读取它,替换必要的内容,然后创建新文件。但我不知道将模板文件放在哪里最好。

那么在 Laravel 中是否有处理这种情况的最佳实践?我用谷歌搜索了一下,但只有关于创建简单 artisan 命令的文章和文档。

最佳答案

更新 04/2020:Laravel 7 提供了一种编辑默认 stub 以对它们进行更改并让 Laravel 获取这些更改的方法。如果你想制作一个完全不同的 stub 来发布一个完全不同的文件,下面的过程是合适的,否则请查看下面链接中的文档。 https://laravel.com/docs/7.x/artisan#stub-customization


我知道这个问题有点老了,但如果你只想创建一个与 Laravel 已经做的类似的文件,这就很容易了。 (我想创建一个在创建时附加一些自定义特征的工作)

所以首先看一下 Laravel 自带的 stub here on github .

接下来,选择您想要的类类型的 stub (我复制了 job-queued stub )并将其粘贴到您可以在应用程序中访问的位置。我将我的放在 App\Console\Stubs 中,因为命令将使用 stub 是有道理的。

之后,使用 php artisan make:command commandName 创建您的 artisan 命令。

在创建的命令中使用此文件 Illuminate\Console\GeneratorCommand。现在让你的命令扩展这个类而不是 Command;这个类是 Laravel 用来创建类的类,它扩展了 Command 本身。

在您的命令中创建一些属性和方法如下:

protected $name = 'make:custom-file'; The name of your command. This replaces $signature

protected $description = 'Command description.';

protected $type = 'Job'; Type of class to make

//location of your custom stub
protected function getStub()
{
return app_path().'/Console/Stubs/custom-job.stub';
}

//The root location the file should be written to
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Jobs';
}

//option flags if any see this for how it works
protected function getOptions()
{
return [];
}

类的完整示例如下所示:

<?php

namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;

class CustomJob extends GeneratorCommand
{

/**
* The name and signature of the console command.
*
* @var string
*/
protected $name = 'make:custom';

/**
* The console command description.
*
* @var string
*/
protected $description = 'Create a custom job.';

/**
* The type of class being generated.
*
* @var string
*/
protected $type = 'Job';

/**
* Get the stub file for the generator.
*
* @return string
*/
protected function getStub()
{
return app_path().'/Console/Stubs/custom-job.stub';
}

/**
* Get the default namespace for the class.
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Jobs';
}

/**
* Get the console command options.
*
* @return array
*/
protected function getOptions()
{
return [];
}
}

运行自定义 artisan 命令后,它会将自定义 stub 写入您指定的位置。

关于php - 创建用于生成自定义类或文件的 artisan 命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34921923/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com