如何在 Laravel 5.8 中自定义 Artisan 命令
介绍
Laravel 打包了许多命令,以帮助开发人员加快开发流程。其中包括一些 php artisan serve
, php artisan make:model
等。
在我的 Laravel 项目中,我使用一种结构来帮助我将不同的层和逻辑彼此分开。
用我技术主管的话说,“你的控制器应该尽可能少地工作”。
所以在我的大多数项目中,创建了所有逻辑的服务类和处理数据库的所有连接的存储库类。
所以简单来说,如果需要任何逻辑则控制器调用服务类,如果需要连接数据库则服务类调用存储库。
不管怎样,在我目前的项目中,我决定编写一个命令来帮助我生成服务类和存储类来加速我的工作速度。
新建命令
首先,你必须了解 Laravel 使用 stub
文件作为模版,并替换模版内的令牌来生成自定义类或者文件。
现在让我们来新建一个自定义的命令
1. 新建命令
执行:
$ php artisan make:command AddService
此命令将在 app\Console\Commands
目录下生成 AddService.php
文件。
在命令执行的同时,AddService 文件生成在 Commands 目录。
2. 存根文件
创建一个 dummy 存根文件,命名为 services.stub
,放在 app/Console/Commands/Stubs/**service.stub**
目录下。
服务存根创建完毕。
3. services.stub
将以下内容添加至 services.stub
文件中
<?php
namespace DummyNamespace;
class DummyClass
{
}
4. 编辑命令
现在在 commands
文件夹目录下打开 AddService.php
文件,并替换以下内容
<?php
namespace App\Console\Commands;
use Illuminate\Console\GeneratorCommand;
class AddServices extends GeneratorCommand
{
/**
* 控制台命令名称
*
* @var string
*/
protected $name = 'make:service';
/**
* 控制台命令描述
*
* @var string
*/
protected $description = 'Create a new service class';
/**
* 生成类的类型
*
* @var string
*/
protected $type = 'Services';
/**
* 获取生成器的存根文件
*
* @return string
*/
protected function getStub()
{
return __DIR__.'/stubs/services.stub';
}
/**
* 获取类的默认命名空间
*
* @param string $rootNamespace
* @return string
*/
protected function getDefaultNamespace($rootNamespace)
{
return $rootNamespace.'\Services';
}
}
5. 进行测试
现在我们可以执行 php artisan make:service TeachersService
命令来新建一个服务 \ 此命令会在 Service 目录下新建一个 TeacherService.php 类。
6. artisan 列表
你也可以执行 php artisan list
命令,将发现你的命令也列出来了。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
少了一步,在Kernel.php里的protected $commands = []属性数组里加上下面这句话: