laravel通过创建自定义artisan make命令来新建类文件详解


Posted in PHP onAugust 17, 2017

前言

本文主要跟大家介绍的是关于laravel通过创建自定义artisan make命令来新建类文件的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。

我们在laravel开发时经常用到artisan make:controller等命令来新建Controller、Model、Job、Event等类文件。 在Laravel5.2中artisan make命令支持创建如下文件:

make:auth   Scaffold basic login and registration views and routes
 make:console  Create a new Artisan command
 make:controller  Create a new controller class
 make:event   Create a new event class
 make:job   Create a new job class
 make:listener  Create a new event listener class
 make:middleware  Create a new middleware class
 make:migration  Create a new migration file
 make:model   Create a new Eloquent model class
 make:policy   Create a new policy class
 make:provider  Create a new service provider class
 make:request  Create a new form request class
 make:seeder   Create a new seeder class
 make:test   Create a new test class

不过,有时候默认的并不能够满足我们的需求, 比方我们在项目中使用的Respository模式来进一步封装了Model文件,就需要经常创建Repository类文件了,时间长了就会想能不能通过artisan make:repository命令自动创建类文件而不是都每次手动创建。

系统自带的artisan make命令对应的PHP程序放在Illuminate\Foundation\Console目录下,我们参照Illuminate\Foundation\Console\ProviderMakeCommand类来定义自己的artisan make:repository命令。

一、创建命令类

在app\Console\Commands文件夹下创建RepositoryMakeCommand.php文件,具体程序如下:

namespace App\Console\Commands;

use Illuminate\Console\GeneratorCommand;

class RepositoryMakeCommand extends GeneratorCommand
{
 /**
  * The console command name.
  *
  * @var string
  */
 protected $name = 'make:repository';

 /**
  * The console command description.
  *
  * @var string
  */
 protected $description = 'Create a new repository class';

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

 /**
  * Get the stub file for the generator.
  *
  * @return string
  */
 protected function getStub()
 {
  return __DIR__.'/stubs/repository.stub';
 }

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

二、创建命令类对应的模版文件

在app\Console\Commands\stubs下创建模版文件 .stub文件是make命令生成的类文件的模版,用来定义要生成的类文件的通用部分创建repository.stub模版文件:

namespace DummyNamespace;
 
 use App\Repositories\BaseRepository;
 
 class DummyClass extends BaseRepository
 {
  
  /**
   * Specify Model class name
   * 
   * @return string
   */
  public function model()
  {
   //set model name in here, this is necessary!
  }
 }

三、注册命令类

将RepositoryMakeCommand添加到App\Console\Kernel.php中

protected $commands = [
  Commands\RepositoryMakeCommand::class
 ];

测试命令

好了, 现在就可以通过make:repository命令来创建repository类文件了

php artisan make:repository TestRepository

php artisan make:repository SubDirectory/TestRepository

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
用PHP函数解决SQL injection
Oct 09 PHP
在php中取得image按钮传递的name值
Oct 09 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
PHP_Cooikes不同页面无法传递的解决方法
Mar 07 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
Jul 25 PHP
JSON用法之将PHP数组转JS数组,JS如何接收PHP数组
Oct 08 PHP
PHP中的switch语句的用法实例详解
Oct 21 PHP
php注册登录系统简化版
Dec 28 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
Sep 11 PHP
Yii2.0实现生成二维码功能实例
Oct 24 PHP
php数组指针函数功能及用法示例
Feb 11 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 PHP
Laravel中的Auth模块详解
Aug 17 #PHP
PHP实现基于回溯法求解迷宫问题的方法详解
Aug 17 #PHP
PHP基于Closure类创建匿名函数的方法详解
Aug 17 #PHP
PHP编译configure时常见错误的总结
Aug 17 #PHP
基于PHP常用文件函数和目录函数整理
Aug 17 #PHP
PHP实现的堆排序算法详解
Aug 17 #PHP
基于php编程规范(详解)
Aug 17 #PHP
You might like
PHP fopen 读取带中文URL地址的一点见解
2012/09/25 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
php闭包中使用use声明变量的作用域实例分析
2018/08/09 PHP
JavaScript数字和字符串转换示例
2014/03/26 Javascript
javascript轻量级模板引擎juicer使用指南
2014/06/22 Javascript
jquery 页眉单行信息滚动显示实现思路及代码
2014/06/26 Javascript
JavaScript实现单击下拉框选择直接跳转页面的方法
2015/07/02 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
JS原生轮播图的简单实现(推荐)
2017/07/22 Javascript
在React 组件中使用Echarts的示例代码
2017/11/08 Javascript
Angular实现可删除并计算总金额的购物车功能示例
2017/12/26 Javascript
vue.js学习笔记之v-bind和v-on解析
2018/05/03 Javascript
vue实现组件之间传值功能示例
2018/07/13 Javascript
基于JS判断对象是否是数组
2020/01/10 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
[01:24:16]2018DOTA2亚洲邀请赛 4.6 全明星赛
2018/04/10 DOTA
python 中文件输入输出及os模块对文件系统的操作方法
2018/08/27 Python
itchat-python搭建微信机器人(附示例)
2019/06/11 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
2019/12/04 Python
Python 解析xml文件的示例
2020/09/29 Python
html5指南-6.如何创建离线web应用程序实现离线访问
2013/01/07 HTML / CSS
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
培训演讲稿范文
2014/01/12 职场文书
电子专业毕业生自我鉴定
2014/01/22 职场文书
市场营销管理制度
2014/01/29 职场文书
倡议书格式模板
2014/05/13 职场文书
机电专业毕业生自我鉴定2014
2014/10/04 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
2015年售票员工作总结
2015/04/29 职场文书
2015企业年终工作总结范文
2015/05/27 职场文书
优化经济发展环境工作总结
2015/08/11 职场文书
重温经典:乔布斯在斯坦福大学的毕业演讲(双语)
2019/08/26 职场文书
如何让你的Nginx支持分布式追踪详解
2022/07/07 Servers