如何在 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 命令,将发现你的命令也列出来了。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 1

少了一步,在Kernel.php里的protected $commands = []属性数组里加上下面这句话:

\App\Console\Commands\AddServices::class

4年前 评论

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