make 命令_自定义Laravel命令行make指令生成的文件

前言

使用Laravel或其他框架开发的时候,通常会创建一个Model基类,让所有的Model继承这个基类,但是使用 Laravel Artisan 控制台指令创建的Model并不是继承于我所创建的基类,为了避免每次都要手工修改,需要重写源码的生成方法

阅读源码并分析

服务提供者是 Laravel 应用启动的中心,所有服务提供者都是通过配置文件 config/app.php 中进行注册,那么我们就直奔 config/app.php 文件找到控制台的服务提供者

5120e12b09e2728b9fe7ff46db37e695.png

打开 ConsoleSupportServiceProvider.php 后,发现有三个服务提供者,目标文件是Artisan 控制台服务提供者,无视其他两个文件

2d06bb2c872000b48dd044e0054fe84d.png


阅读 ArtisanServiceProvider.php 代码后,找到了注册创建Model命令的方法 registerModelMakeCommand

ac2e9a8aa36cecad32c4ce6395ef9443.png


最后打开 ModelMakeCommand.php 文件,找到了Model生成器文件 stubs/model.stub

89a0221849ee0710fb8c73e83a1ad1f0.png


分析:只需要修改 stubs/model.stub 文件即可,但不提倡直接修改源码,这里选择创建新的ModelMakeCommand服务,重写 getStub 方法,重新绑定到服务容器

自定义模型创建命令服务

在项目根目录下创建 Customize 目录,用于存放自定义框架类,这里我根据源 ModelMakeCommand.php 文件的存放路径, 创建 Customize/Foundation/Console/ModelMakeCommand.php 文件,并继承源类

<?phpnamespace AppCustomizeFoundationConsole;class ModelMakeCommand extends IlluminateFoundationConsoleModelMakeCommand{    protected function getStub()    {        if ($this->option('pivot')) {            return parent::getStub();        }        return __DIR__ . '/stubs/model.stub';    }}复制代码

在当前文件目录下创建 stubs/model.stub 文件

<?phpnamespace DummyNamespace;use AppCustomizeDatabaseEloquentModel; // 自定义的Model基类class DummyClass extends Model{    //}复制代码

重新绑定模型创建命令服务

两种方式:

  1. 直接在 AppServiceProvider.php 中重新绑定新的ModelMakeCommand服务
  2. 创建一个新的服务提供者,并将其追加到配置文件 config/app.php 的 providers 数组中
cdfcb45f4e7d395d1eabf0e1e9487611.png

测试

使用 php artisan make:model Test 创建一个Model,确认过眼神,是继承于自定义Model基类的Model

bd3a0c38db65ff0f77faecfdf142ec10.png


作者:jassue
链接:https://juejin.im/post/6885152866261008397

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值