自己写的thinkphp自动生成类

CqhModel.class.php

<?php
namespace Cqh\Model;
use Think\Model;

class CqhModel extends Model
{
    protected $trueTabelName;   //对应数据库中的表名
    protected $moduleName;      //对应的模块名称
    protected $tpName;  //表对应的TP名
    protected $fields;    //所有字段信息
    protected $tableComment;  //表注释
    public function iniSet($tableName,$moduleName)
    {
        $this->buildDir($moduleName);
        $this->setAttribute($tableName,$moduleName);
        return TRUE;
    }

    /*********************** 生成控制器 ***********************/
    public function gController()
    {
        $cDir = APP_PATH . $this->moduleName . ‘/Controller‘;
        $file = $cDir . ‘/‘ . $this->tpName . ‘Controller.class.php‘;
        ob_start();
        include(APP_PATH . ‘Cqh/Template/Controller.php‘);
        $str = ob_get_clean();
        if(!is_file($file))
        {
            file_put_contents($file,"<?php\r\n".$str);
        }
        return TRUE;
    }

    /*********************** 生成模型 ***********************/
    public function gModel()
    {
        $mDir = APP_PATH.$this->moduleName.‘/Model‘;
        if(!is_dir($mDir)) {
            mkdir($mDir,0755,true);
        }
        $file = $mDir . ‘/‘ . $this->tpName . ‘Model.class.php‘;
        ob_start();
        include(APP_PATH . ‘Cqh/Template/model.php‘);
        $str = ob_get_clean();
        if(!is_file($file))
        {
            file_put_contents($file,"<?php\r\n".$str);
        }
        return TRUE;
    }

    /*********************** 生成静态页 ***********************/
    public function gView()
    {
        $vDir = APP_PATH . $this->moduleName . ‘/View/‘.$this->tpName;
        if(!is_dir($vDir)) {
            mkdir($vDir,755,TRUE);
        }
        $tableComment=$this->tableComment;
        $arr = array(‘add‘,‘save‘,‘lst‘);
        foreach($arr as $v)
        {
            $file = $vDir."/$v.html";
            ob_start();
            include(APP_PATH . "Cqh/Template/$v.html");
            $str = ob_get_clean();
            if(!is_file($file)) {
                file_put_contents($file, $str);
            }
        }
        return TRUE;
    }

    /********************** 初始化属性 **********************/
    private function setAttribute($tableName,$moduleName)
    {
        /**************** 初始化属性$moduleName ****************/
        $this->moduleName = $moduleName;

        /**************** 初始化属性$trueTabelName ****************/
        //判断如果没有表前缀就加上
        $prefix = C(‘DB_PREFIX‘);
        if(strpos($tableName,$prefix) !== 0)
            $this->trueTabelName = $prefix.$tableName;
        else
            $this->trueTabelName = $tableName;

        /**************** 初始化属性$tpName ****************/
        //去掉表前缀
        if(strpos($tableName,$prefix) === 0)
        {
            $len = strlen($prefix);
            //把表名从前缀开始截取到最后
            $tableName = substr($this->trueTabelName, $len);
        }
        //去掉下划线
        $tableName = explode(‘_‘,$tableName);
        //把$tableName中第一个元素都使用ucfirst处理一遍
        $tableName = array_map(‘ucfirst‘,$tableName);
        $tableName = implode(‘‘,$tableName);
        $this->tpName = $tableName;

        /**************** 初始化属性$fields ****************/
        //取出所有的字段的信息
        $this->fields = $this->query(‘SHOW FULL FIELDS FROM ‘.$this->trueTabelName);

        /**************** 初始化属性$tableComment ****************/
        $result = $this->query("SELECT TABLE_COMMENT FROM information_schema.TABLES WHERE TABLE_SCHEMA=‘".C(‘DB_NAME‘)."‘ and TABLE_NAME=‘".$this->trueTabelName."‘");
        $this->tableComment = $result[0][‘TABLE_COMMENT‘];

        return TRUE;
    }

    /********************** 创建模块目录 **********************/
    public function buildDir($module) {
        // 没有创建的话自动创建
        if(is_writeable(APP_PATH)) {
            $dirs  = array(
                APP_PATH.$module.‘/‘,
                APP_PATH.$module.‘/Common/‘,
                APP_PATH.$module.‘/Controller/‘,
                APP_PATH.$module.‘/Model/‘,
                APP_PATH.$module.‘/Conf/‘,
                APP_PATH.$module.‘/View/‘,
            );
            foreach ($dirs as $dir){
                if(!is_dir($dir))  mkdir($dir,0755,true);
            }
        }
    }
}

CqhController.class.php

<?php

namespace  Cqh\Controller;
use Think\Controller;

class CqhController extends Controller
{
    public function index()
    {
        if(IS_POST)
        {
            $tableName = I(‘post.tableName‘);   //接收表单中的表名
            $moduleName = ucfirst(I(‘post.moduleName‘));    //接收模块名
            $generaType = I(‘post.generaType‘);//接收需要生成的类型
            $this->validate($tableName,$moduleName,$generaType);//验证表单
            $gModel = D(‘Cqh‘);
            $gModel->iniSet($tableName,$moduleName); //初始化,传入表名和模块名
            if($generaType[‘controller‘])
                $gModel->gController(); //生成控制器
            if($generaType[‘model‘])
                $gModel->gModel();  //生成模型
            if($generaType[‘view‘])
                $gModel->gView();   //生成视图
            $this->success(‘生成成功‘);
            exit;
        }
        $this->display();
    }

    public function validate($tableName,$moduleName,$generaType)
    {
        if(!((preg_match(‘/\S+/‘,$tableName) === 1)))
            $this->error(‘请输入表名‘);
        if(!((preg_match(‘/\S+/‘,$moduleName) === 1)))
            $this->error(‘请输入模块名‘);
        if(!$generaType)
            $this->error(‘请选择要生成的类型‘);
    }
}

View/Cqh/index.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Cqh代码生成器</title>
    <style>
        *{font-size:25px;}
        .title{font-size:35px;;font-weight: bold;margin:auto auto;}
        input[type=text]{width:200px;height:30px;font-size:25px;}
    </style>
</head>
<body>
<div class="title">Cqh代码生成器</div>
<form method="post" action="__SELF__">
    <table>
        <tr>
            <td>表名</td>
            <td>
                <input type="text" name="tableName"/>
            </td>
        </tr>
        <tr>
            <td>模块名</td>
            <td>
                <input type="text" name="moduleName"/>
            </td>
        </tr>
        <tr>
            <td>选择要生成的内容</td>
            <td>
                <input type="checkbox" name="generaType[controller]" value="1" checked="checked"/>控制器
                <input type="checkbox" name="generaType[model]" value="1" checked="checked"/>模型
                <input type="checkbox" name="generaType[view]" value="1" checked="checked"/>视图
            </td>
        </tr>
        <tr>
            <td></td>
            <td>
                <input type="submit" class="button" value=" 确定 "/>
                <input type="reset" class="button" value=" 重置 "/>
            </td>
        </tr>
    </table>
</form>
</body>
</html>
时间: 2024-10-08 07:56:18

自己写的thinkphp自动生成类的相关文章

ECshop网点程序优化-自动生成类目页Keywords、Desciption Meta

ECshop支持针对每个新建的类目自定义Keywords.Description Meta信息,好处就不用说了,帮助SEO或者让浏览者了解这是什么页面,但如果有几百个类目的时候,人工去写这些类目又有点累人(咱不干体力劳动的 活),花了点时间,写了个自动生成Keywords.Description的PHP脚本,支持四级分类,原理是子类目包含爸爸类目.爷爷类目...到顶 级类目名作为关键词,然后一句描述的话,包含这些类目的名称.大家可以根据自己需要简单的修改. 用法,在你的后台类目,默认是Admin

用Enterprise Architect从源码自动生成类图

http://blog.csdn.net/zhouyong0/article/details/8281192 /*references:感谢资源分享者.info:简单记录如何通过工具从源码生成类图,便于分析代码结构,对源码阅读挺有用.*/ 看点开源代码学习下,本想找个代码查看方便点的工具,便于理清代码层次,结果发现了Enterprise Architect这一好工具,试用下来还挺方便的.功能上和Rational Rose大致是一类,用处很广,很多我都不懂,知道能画各种UML图,支持的源码语言类型

Individual Project &quot;写一个能自动生成小学四则运算题目的程序&quot;

一.题目简介 写一个能自动生成小学四则运算题目的程序. 初步拟定要实现的功能后,估计一下自己需要花多长时间.编程过程中记录自己实际用了多长时间. 然后和同学们比较一下各自程序的功能.实现方法的异同等等. 二.源码的github链接 https://github.com/gaino1/IndividualProject 三.所设计的模块测试用例.测试结果截图 四.问题及解决方案.心得体会 要想学好C语言,要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我也发现我的好多不足之处,首先是自

eclipse自动生成类图

怎么从java类自动转换成java类图,一直没搞成.于是,我在网上找了一款更强大的自动生成java类图的eclipse插件--ModelSpoon..这个兄弟很强大,只要把.java文件直接拖进去,它就能够直接生成java类图.非常好用. 2.安装和使用ModelSpoon功能:能将Eclipse中现有的java类生成类图一:什么是ModelGoon?它是一个Eclipse插件,用于基于UML图的模型设计,以及逆向工程(即从已有源代码生成类图).二:安装下载ModelGoon-4.4.1-sit

XML之自动生成类,添加,修改,删除类的属性

1. class ClassHelperDemo { public static void Main() { #region 演示一:动态生成类. //生成一个类t. Type t = ClassHelper.BuildType("MyClass"); #endregion #region 演示二:动态添加属性到类. //先定义两个属性. List<ClassHelper.CustPropertyInfo> lcpi = new List<ClassHelper.Cu

eclipse插件自动生成类图

安装和使用AmaterasUML, 安装AmaterasUML前,需要先安装GEF.采用eclipse在线安装方式安装就好: 在window ==>preferences  ==>install/update ==> Available Software Sites, 搜索 GEF ,勾选第二个插件, 地址为 http://download.eclipse.org/tools/gef/updates/releases/ ,点击ok,安装完成. 安装好GEF后,安装AmaterasUML:

thinkphp 自动生成模块目录结构

要达到的目的 在application目录下创建自定义模块如admin,用命令行方式自动创建该目录及目录下默认结构 要运行的命令 目标路径(application)下运行 application> php think build --module admin 坑 环境变量:开始时运行命令行提示php非内置命令巴拉巴拉,打开环境变量设置,将php程序路径(非thinkphp)添加到环境变量,重启命令行窗口: build.php文件:运行还是不成功,千/10度了一下发现application目录下并

像阿超那样,花20分钟写一个能自动生成小心四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算。 和同学们比较一下各自程序的功能,实现方法的异同,等等

package chapter; public class szys {    public static void main(String[] args)    { print30Questions();    }        private static void print30Questions()     {        //说明:打印30道题函数,把接收到的题目字符串按照指定格式输出.        for (int i = 0; i < 10; i++)        {    

写一个能自动生成四则运算题目的软件,要求除了整数,还要支持正分数的四则运算。和同学们比较各自的程序功能、实现方法的异同。

package Rational; import java.util.Random; import java.util.Scanner; public class szys{             public static void res() {                                                   System.out.println("1.显示答案\t2.直接出下一题");