如何在 Laravel 5.8 中自定义 Artisan 命令

介绍

Laravel 打包了许多命令,以帮助开发人员加快开发流程。其中包括一些 php artisan servephp 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 命令,将发现你的命令也列出来了。


Practice makes perfect.

原文地址:https://medium.com/@mercyware/making-a-c...

译文地址:https://learnku.com/laravel/t/26703

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 1

期待进度更新

2周前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!