模型类: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','edit','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

<?phpnamespace  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('生成成功',U($moduleName . '/' . $tableName . '/lst'));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>

模板文件:Template/(controller.php、model.php、add.html、edit.html、lst.html)

1.controller.php

namespace <?php echo $this->moduleName;?>\Controller;
use Think\Controller;class <?php echo $this->tpName;?>Controller extends Controller
{// 添加public function add(){if(IS_POST){$model = D('<?php echo $this->tpName;?>');if($model->create()){if($model->add()){$this->success('添加成功!', U('lst'));exit;}else {$sql = $model->getLastSql();$this->error('插入数据库失败!.<hr />SQL:'.$sql);}}else {$error = $model->getError();$this->error($error);}}$this->display();}public function lst(){$model = D('<?php echo $this->tpName;?>');$data = $model->search();$this->assign($data);$this->display();}public function edit($id){$model = D('<?php echo $this->tpName;?>');if(IS_POST){if($model->create()){if($model->save() !== FALSE){$this->success('修改成功!', U('lst'));exit;}else {$sql = $model->getLastSql();$this->error('修改数据库失败!.<hr />SQL:'.$sql);}}else {$error = $model->getError();$this->error($error);}}$data = $model->find($id);$this->assign('data', $data);$this->display();}public function del($id){$model = D('<?php echo $this->tpName;?>');$model->delete($id);$this->success('操作成功!', U('lst'));}public function bdel(){$delid = I('post.delid');if($delid){$delid = implode(',', $delid);$model = D('<?php echo $this->tpName;?>');$model->delete($delid);}else$this->error('请选择要删除的记录!');$this->success('操作成功!', U('lst'));}
}

2.model.php

namespace <?php echo $this->moduleName;?>\Model;
use Think\Model;class <?php echo $this->tpName;?>Model extends Model
{protected $_validate = array(<?php foreach ($this->fields as $k => $v):if($v['Field'] == 'id')continue ;if($v['Null'] == 'NO' && $v['Default'] === null):?>array('<?php echo $v['Field']; ?>', 'require', '<?php echo $v['Comment']; ?>不能为空!', 1),
<?php endif; ?><?php endforeach; ?>
);public function search(){$where = 1;$orderWay = 'ASC';// 取出总的记录数$count = $this->where($where)->count();// 生成翻页对象$pageObj = new \Think\Page($count, 25);// 获取翻页的字符串:上一页、下一页$pageStr = $pageObj->show();// 取出当前页的数据$data = $this->where($where)->order("id $orderWay")->limit($pageObj->firstRow.','.$pageObj->listRows)->select();return array('pageStr' => $pageStr,'data' => $data,);}protected function _before_insert(&$data, $option){}protected function _before_update(&$data, $option){}
}

3.add.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>添加<?php echo $this->tableComment;?></title>
<meta name="robots" content="noindex, nofollow">
</head>
<body>
<h1><span><a href="{:U('lst')}"><?php echo $this->tableComment;?>列表</a></span><span> - 添加<?php echo $this->tableComment;?></span></h1><form method="post" action="__SELF__"><table><?php foreach ($this->fields as $k=>$v):if($v['Field'] == 'id')continue;?><tr><td><?php echo $v['Comment'];?></td><td><?php if($arr = strstr("{$v['Type']}" ,'enum')) :$arr = substr($arr,6,-2);$arr = explode("','",$arr);foreach($arr as $radioValue=>$radioName):?><input type="radio" name="<?php echo $v['Field'];?>" value="<?php echo $radioValue+1;?>"/><?php echo $radioName;?><?php endforeach;?><?php else: ?><input type="text" name="<?php echo $v['Field'];?>" /><?php endif;?><?php if($v['Null'] == 'NO' && $v['Default'] === null): ?><span>*</span><?php endif; ?></td></tr><?php endforeach;?><tr><td colspan="2" align="center"><br /><input type="submit" class="button" value=" 确定 " /><input type="reset" class="button" value=" 重置 " /></td></tr></table>
</form>
</body>
</html>

4.edit.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>修改<?php echo $this->tableComment;?></title>
</head>
<body>
<h1><span><a href="{:U('lst')}"><?php echo $this->tableComment;?>列表</a></span><span> - 修改<?php echo $this->tableComment;?></span>
</h1>
<div><form method="post" action="__SELF__"><input type="hidden" name="id" value="<?php echo '<?php echo $data[\'id\']; ?>'; ?>" />        <table cellspacing="1" cellpadding="3" width="100%"><?php foreach ($this->fields as $k=>$v):if($v['Field'] == 'id')continue;?><tr><td><?php echo $v['Comment'];?></td><td><?php if($arr = strstr("{$v['Type']}" ,'enum')) :$arr = substr($arr,6,-2);$arr = explode("','",$arr);foreach($arr as $radioValue=>$radioName):?><input type="radio" name="<?php echo $v['Field'];?>" value="<?php echo $radioValue+1;?>" <?php echo '<?php if($data[\''.$v['Field'].'\'] == \''.$radioName.'\')'.'echo \'checked="checked"\'?>'?>/><?php echo $radioName;?><?php endforeach;?><?php else: ?><input type="text" name="<?php echo $v['Field'];?>" maxlength="60" size="40" value="<?php echo '<?php echo $data[\''.$v['Field'].'\']; ?>'; ?>" /><?php endif;?><?php if($v['Null'] == 'NO' && $v['Default'] === null): ?><span>*</span><?php endif; ?></td></tr><?php endforeach;?><tr><td colspan="2" align="center"><br /><input type="submit" class="button" value=" 确定 " /><input type="reset" class="button" value=" 重置 " /></td></tr></table></form>
</div>
</body>
</html>

5.lst.html

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title><?php echo $this->tableComment;?>列表</title>
<meta name="robots" content="noindex, nofollow">
<script type="text/javascript" src="http://misc.360buyimg.com/lib/js/e/jquery-1.6.4-min.js"></script>
</head>
<body>
<h1><span><a href="{:U('add')}">添加<?php echo $this->tableComment;?></a></span>    <span"> - <?php echo $this->tableComment;?>列表 </span>
</h1>
<form method="post" action="{:U('bdel')}" οnsubmit="return confirm('确定要删除吗?');"><div><table><tr><?php foreach ($this->fields as $k => $v): ?><th <?php if($v['Comment'] == 'id') echo 'width="100"';?>><?php if($v['Comment'] == 'id') echo '<input type="checkbox" id="selall"/>';?><?php echo $v['Comment']; ?></th><?php endforeach; ?><th>操作</th></tr><?php echo '<?php foreach ($data as $k => $v): ?>'; ?><tr><?php foreach ($this->fields as $k => $v): ?><td align="center">
<?php
if($v['Field'] == 'id') echo <<<CHECKBOX
<input name="delid[]" type="checkbox" value="<?php echo \$v['id']; ?>" />
CHECKBOX;
?><?php echo '<?php echo $v[\''.$v['Field'].'\']; ?>'; ?></td><?php endforeach; ?><td align="center"><a href="{:U('edit',array('id'=>$v['id']))}" title="编辑">编辑</a><a οnclick="return confirm('确定要删除吗?');" href="{:U('del',array('id'=>$v['id']))}" title="移除">移除</a> </td></tr><?php echo '<?php endforeach; ?>'; ?><tr><td><input type="submit" value="删除所选" /></td><td colspan="<?php echo $k+2; ?>"><?php echo '<?php echo $pageStr; ?>'; ?></td></tr></table></div>
</form></body>
</html>
<script>$('#selall').click(function () {$('input[name="delid[]"]').prop('checked', this.checked);});
</script>

转载于:https://www.cnblogs.com/chenqionghe/p/4374422.html

自己写的thinkphp自动生成类相关推荐

  1. 第五十七篇:VS2015建立一个完整的c++工程:头文件.h 源文件.cpp,自动生成类

    之前没有用VS或者在vs中一个源程序写到底,没有使用C++编一个工程 打开VS2015 ,新建VS win32工程,前面步骤很简单,不再阐述 下面直接开始: 新建一个VC++ win32的程序, 在源 ...

  2. JCIM | 用于自动生成类药分子的生成网络复合体(GNC)

    作者/编辑 | 王建民 导读 目前的药物发现工作既昂贵又耗时.如何创造出种类繁多的新型化合物,使其不仅具有理想的药理特性,而且低收入人群也能廉价获得,仍然是一项具有挑战性的任务.这项工作中,研究人员开 ...

  3. python list转字符串_我用python写了个自动生成给文档生成索引的脚本!懒人智慧...

    我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库: PiperLiu / ACMOI_Journey ,记录自己的刷题轨迹,并总结一下方法.心得.想到一个 ...

  4. idea自动生成类注释和方法注释

    一,自动生成类注释 打开Setting,选在Editor,然后是File and Code Templates 最后是Files 中的Class ,点击class后,编辑右边的红色边框,里边是模板,将 ...

  5. java自动生成类_自动生成优化的Java类专业知识

    java自动生成类 如果您今年访问过JavaOne,您可能已经参加了我的演讲"如何从数据库生成定制的Java 8代码". 在那次演讲中,我展示了如何使用Speedment Open ...

  6. IDEA 自动生成类注释和方法注释

    新建类,自动生成类注释的模板配置  File->Settings->Editor->File and Code Templates->Class /** * @Descript ...

  7. 「懒惰的美德」我用 python 写了个自动生成给文档生成索引的脚本

    我用 python 写了一个自动生成索引的脚本 简介:为了刷算法题,建了一个 GitHub仓库:PiperLiu / ACMOI_Journey,记录自己的刷题轨迹,并总结一下方法.心得.想到一个需求 ...

  8. 搜索的php mysql代码生成器_PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)...

    根据 Mysql 里的字段 自动生成 类文件: 但需要导入: require_once ./db/ez_sql_core.php; require_once ./db/ez_sql_mysql.php ...

  9. 【ChatGPT整活大赏】写论文后自动生成视频

    ChatGPT国内又火了一把,功能很强大,接下来就带大家感受一下它的强大之处,通过ChatGPT写一篇论文并自动生成视频,增加内容的可读性. 话不多说,先上成果: 用ChatGPT写论文后自动生成视频 ...

最新文章

  1. golang interface{} 转 struct结构体
  2. 皮一皮:当有人在我身边时...
  3. javascript-基本数据类型和转换
  4. xipian的php中文分词
  5. Dephi7程序设计与开发技术大全(求是科技)
  6. Ribbon-4 Ribbon脱离Eureka使用
  7. C#使用Redis集群缓存
  8. 数学C语言编程,数学规划 (最速下降法,c语言编程).doc
  9. python 矩阵除法_Python线性代数学习笔记——矩阵的基本运算和基本性质,实现矩阵的基本运算...
  10. git相关常用基本用法命令及分支操作指南命令
  11. NLP简报(Issue #3)
  12. 【U+】通用财务修改财务参数:业务生成的会计凭证不允许修改
  13. 十年游戏建模师给想学次世代游戏建模同学的一些忠告,太受益了
  14. HDU 2079 (母函数)
  15. 至于你信不信,反正我信了
  16. 一、线性表的顺序存储和基本运算
  17. 在windows11环境下如何通过主机名ping通其它系统
  18. 大学生计算机面试,大学生计算机毕业面试自我介绍
  19. 图2——利用邻接表创建有向图
  20. EMC-传导发射之--共振才是EMI问题的最大本质

热门文章

  1. linux粘着位的使用(t权限)
  2. shell中while循环案例
  3. 某小公司项目环境部署演变之路
  4. 我发现一个新的软件,用自然语言编程!非常酷!
  5. 困扰程序员的30种软件开发问题,你是否时曾相识?
  6. 面试还在被红-黑树虐?看完这篇动图文章轻松反虐面试官
  7. CSS Modules 用法教程
  8. 【Python】青少年蓝桥杯_每日一题_11.19_围圈报数
  9. php多线程foreach,php中foreach curl实现多线程例子
  10. css点击a标签显示下划线_好程序员HTML5培训教程-html和css基础知识