文档章节

laravel实现自定义生成文件命令

o
 osc_g8254g7s
发布于 2019/08/20 14:07
字数 332
阅读 0
收藏 0

实现 create:entity 命令

1. 创建模版
<?php

namespace DummyNamespace;

class DummyClass extends Entity
{
// 自定义需要替换的内容关键字
AAA
}

2. 实现command

class CreateEntity extends GeneratorCommand
{
    protected $signature = 'create:entity {name}';
    
    protected $description = '自动生成Model Entity 实例';
    
    // 数据库类型对照
    public static $dictionary = [
        'string' => ['char', 'text'],
        'int' => ['int','numeric'],
        'float' => ['double','float','decimal']
    ];

    protected $type = 'entity';

    /**
     * 设置模板地址
     * @return string
     */
    protected function getStub()
    {
        return __DIR__.'/stubs/Entity.stub';
    }

    /**
     * 设置命名空间,以及文件路径
     * @param string $rootNamespace
     * @return string
     */
    protected function getDefaultNamespace($rootNamespace)
    {
        return $rootNamespace.'\Repositories\Entitys'; //偷懒、直接写死
    }

    /**
     * 设置类名和自定义替换内容
     * @param string $stub
     * @param string $name
     * @return string
     */
    protected function replaceClass($stub, $name)
    {

        $stub = $this->replaceCustomizeSetting($stub); //替换自定义内容

        return parent::replaceClass($stub, $name);
    }

    /**
     * 替换自定义内容
     * @param $stub
     * @return mixed
     */
    protected function replaceCustomizeSetting($stub){

        //将输入的类名处理成表名
        $name =  $this->getNameInput();
        $name = rtrim($name,'E');
        $tableName = strtolower(trim(preg_replace("/[A-Z]/", "_\\0",$name), "_")); //驼峰变成小写加_

        $info = collect(\DB::select("desc rxt_".$tableName.";"))->toArray(); //获取表字段和类型列表
        $list = [];
        foreach ($info as $key => $value){ //转成二维数组
            $arr = collect($info[$key])->toArray();
            if($arr['Field'] == 'deleted_at') continue;
            array_push($list, $arr);
        }
        $fieldExample = "    /**  \r\n    * @var type isNull \r\n    */ \r\n    public \$fieldName;\r\n";
        $result = null;
        foreach ($list as $item){
            $result = $result.$fieldExample;
            foreach (static::$dictionary as $key => $value){
                foreach ($value as $a => $b){
                    if(strstr($item['Type'], $b)){
                        $result = str_replace('type', $key, $result);
                    }
                }
            }
            $isNull = $item['Null'] == 'YES' ? '|null' : '';
            $result = str_replace('isNull', $isNull, $result);
            $result = str_replace('fieldName', $item['Field'], $result);

        }

        return str_replace('AAA', $result, $stub);
    }
    
}

o
粉丝 0
博文 500
码字总数 0
作品 0
私信 提问
加载中
请先登录后再评论。

暂无文章

如何在Ruby中生成随机字符串 - How to generate a random string in Ruby

问题: I'm currently generating an 8-character pseudo-random uppercase string for "A" .. "Z": 我目前正在为“ A” ..“ Z”生成一个8个字符的伪随机大写字符串: value = ""; 8.times{......

法国红酒甜
今天
20
0
Python中的mkdir -p功能[重复] - mkdir -p functionality in Python [duplicate]

问题: This question already has an answer here: 这个问题在这里已有答案: How can I safely create a nested directory? 如何安全地创建嵌套目录? 25 answers 25个答案 Is there a way...

技术盛宴
今天
15
0
原价500元的认证证书,限时免费考取!

本文作者:y****n 百度云智学院致力于为百度ABC战略(人工智能、大数据、云计算)提供人才生态体系建设,包括基于百度ABC、IoT的课程体系,整合百度优势技术能力的深度学习技术、Apollo无人车...

百度开发者中心
昨天
17
0
在virtualenv中使用Python 3 - Using Python 3 in virtualenv

问题: Using virtualenv , I run my projects with the default version of Python (2.7). 使用virtualenv ,我使用默认版本的Python(2.7)运行项目。 On one project, I need to use Pyth......

富含淀粉
今天
16
0
Python的__init__和self是做什么的? - What __init__ and self do on Python?

问题: I'm learning the Python programming language and I've came across something I don't fully understand. 我正在学习Python编程语言,遇到了一些我不太了解的东西。 In a method ......

javail
今天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部