企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
##开始使用 1. 填写好控制器名称 2. 填写好表单元素 3. 点同步字段,会将表单元素自动同步到表字段,如果不想建表,也要点一下同步,不然前端校验通过不了,包含 `id`、`status`、`isdelete`、`create_time`、`update_time` 的数据类型随便填写,模型会根据选项自动生成,不按此处选择的数据类型生成 4. 勾选需要生成的首页菜单 5. 勾选是否创建模型和验证器 6. 点击生成 ![](https://box.kancloud.cn/a00afca056af9784c09c2fa8395de641_1487x1083.png) ![](https://box.kancloud.cn/bf1ad532f76d3f1968b16541f55344c8_1409x373.png) ![](https://box.kancloud.cn/814acc604c19dfcd12ebb6d11565e9fa_1127x673.png) >[info] 以下代码、日志全部是自动生成,没有做任何修改,包括缩进,严格的缩进非常方便二次编辑和查阅 ##生成文件 ###controller/TestOne.php ``` <?php // +---------------------------------------------------------------------- // | tpadmin [a web admin based ThinkPHP5] // +---------------------------------------------------------------------- // | Copyright (c) 2016 tianpian All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: tianpian <tianpian0805@gmail.com> // +---------------------------------------------------------------------- //------------------------ // 测试一控制器 //------------------------- namespace app\admin\controller; use app\admin\Controller; class TestOne extends Controller { use \app\admin\traits\controller\Controller; protected $isdelete = false; protected function filter(&$map) { if ($this->request->param("name")) $map['name'] = ["like", "%" . $this->request->param("name") . "%"]; if ($this->request->param("mobile")) $map['mobile'] = ["like", "%" . $this->request->param("mobile") . "%"]; } } ``` ###view/test_one/index.html ``` {extend name="template/base" /} {block name="content"} <div class="page-container"> {include file='form' /} <div class="cl pd-5 bg-1 bk-gray"> <span class="l"> {include file="template/table_menu" menu="add,forbid,resume" /} </span> <span class="r pt-5 pr-5"> 共有数据 :<strong>{$count}</strong> 条 </span> </div> <table class="table table-border table-bordered table-hover table-bg mt-20"> <thead> <tr class="text-c"> {include file="th" /} <th width="70">操作</th> </tr> </thead> <tbody> {volist name="list" id="vo"} <tr class="text-c"> {include file="td" /} <td class="f-14"> {$vo.status|show_status=$vo.id} {tp:access action='edit'} <a title="编辑" href="javascript:;" onclick="layer_open('编辑','{:\\think\\Url::build(\'edit\',[\'id\'=>$vo[\'id\']])}')" style="text-decoration:none"><i class="Hui-iconfont">&#xe6df;</i></a> {/tp:access} {tp:access action='delete'} <a title="删除" href="javascript:;" onclick="del(this,'{$vo.id}','{:\\think\\Url::build(\'delete\')}')" class="ml-5" style="text-decoration:none"><i class="Hui-iconfont">&#xe6e2;</i></a> {/tp:access} </td> </tr> {/volist} </tbody> </table> <div class="page-bootstrap">{$page}</div> </div> {/block} ``` ###view/test_one/th.html ``` <th width="25"><input type="checkbox"></th> <th width="">{:sort_by('ID','id')}</th> <th width="">{:sort_by('姓名','name')}</th> <th width="">性别</th> <th width="">手机</th> <th width="">学历</th> <th width="">备注</th> ``` ###view/test_one/td.html ``` <td><input type="checkbox" name="id[]" value="{$vo.id}"></td> <td>{$vo.id}</td> <td>{$vo.name|high_light=\\think\\Request::instance()->param('name')}</td> <td>{$vo.sex}</td> <td>{$vo.mobile|high_light=\\think\\Request::instance()->param('mobile')}</td> <td>{$vo.degree}</td> <td>{$vo.remark}</td> ``` ###view/test_one/form.html ``` <form class="mb-20" method="get" action="{:\\think\\Url::build(\\think\\Request::instance()->action())}"> <input type="text" class="input-text" style="width:250px" placeholder="姓名" name="name" value="{:\\think\\Request::instance()->param('name')}"> <input type="text" class="input-text" style="width:250px" placeholder="手机" name="mobile" value="{:\\think\\Request::instance()->param('mobile')}"> <button type="submit" class="btn btn-success"><i class="Hui-iconfont">&#xe665;</i> 搜索</button> </form> ``` ###view/test_one/edit.html ``` {extend name="template/base" /} {block name="content"} <div class="page-container"> <form class="form form-horizontal" id="form" method="post" action="{:\\think\\Request::instance()->baseUrl()}"> <input type="hidden" name="id" value="{:isset($vo.id)?$vo.id:''}"> <div class="row cl"> <label class="form-label col-xs-3 col-sm-3"><span class="c-red">*</span>姓名:</label> <div class="formControls col-xs-6 col-sm-6"> <input type="text" class="input-text" value="{:isset($vo.name)?$vo.name:''}" placeholder="" name="name" datatype="*" nullmsg="请填写姓名"> </div> <div class="col-xs-3 col-sm-3"></div> </div> <div class="row cl"> <label class="form-label col-xs-3 col-sm-3"><span class="c-red">*</span>性别:</label> <div class="formControls col-xs-6 col-sm-6 skin-minimal"> <div class="radio-box"> <input type="radio" name="sex" id="sex-0" value="" datatype="*" nullmsg="请选择性别"> <label for="sex-0">选项一</label> </div> </div> <div class="col-xs-3 col-sm-3"></div> </div> <div class="row cl"> <label class="form-label col-xs-3 col-sm-3">手机:</label> <div class="formControls col-xs-6 col-sm-6"> <input type="text" class="input-text" value="{:isset($vo.mobile)?$vo.mobile:''}" placeholder="" name="mobile" datatype="m" errormsg="手机号格式错误" ignore="ignore"> </div> <div class="col-xs-3 col-sm-3"></div> </div> <div class="row cl"> <label class="form-label col-xs-3 col-sm-3"><span class="c-red">*</span>学历:</label> <div class="formControls col-xs-6 col-sm-6"> <div class="select-box"> <select name="degree" class="select" datatype="*" nullmsg="请选择学历"> <option value="">选项一</option> </select> </div> </div> <div class="col-xs-3 col-sm-3"></div> </div> <div class="row cl"> <label class="form-label col-xs-3 col-sm-3">备注:</label> <div class="formControls col-xs-6 col-sm-6"> <textarea class="textarea" placeholder="" name="remark" onKeyUp="textarealength(this,100)">{:isset($vo.remark)?$vo.remark:''}</textarea> <p class="textarea-numberbar"><em class="textarea-length">0</em>/100</p> </div> <div class="col-xs-3 col-sm-3"></div> </div> <div class="row cl"> <div class="col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3"> <button type="submit" class="btn btn-primary radius">&nbsp;&nbsp;提交&nbsp;&nbsp;</button> <button type="button" class="btn btn-default radius ml-20" onClick="layer_close();">&nbsp;&nbsp;取消&nbsp;&nbsp;</button> </div> </div> </form> </div> {/block} {block name="script"} <script type="text/javascript" src="__LIB__/Validform/5.3.2/Validform.min.js"></script> <script> $(function () { $("[name='sex'][value='{:isset($vo.sex)?$vo.sex:''}']").attr("checked",true); $("[name='degree']").find("[value='{:isset($vo.degree)?$vo.degree:''}']").attr("selected",true); $('.skin-minimal input').iCheck({ checkboxClass: 'icheckbox-blue', radioClass: 'iradio-blue', increaseArea: '20%' }); $("#form").Validform({ tiptype:2, ajaxPost:true, showAllError:true, callback:function(ret){ ajax_progress(ret); } }); }) </script> {/block} ``` ###validate/TestOne.php ``` <?php // +---------------------------------------------------------------------- // | tpadmin [a web admin based ThinkPHP5] // +---------------------------------------------------------------------- // | Copyright (c) 2016 tianpian All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: tianpian <tianpian0805@gmail.com> // +---------------------------------------------------------------------- //------------------------ // 测试一验证器 //------------------------- namespace app\admin\validate; use think\Validate; class TestOne extends Validate { protected $rule = [ "name|姓名" => "require", "sex|性别" => "require", "mobile|手机" => "", "degree|学历" => "require", ]; } ``` ###model/TestOne.php ``` <?php // +---------------------------------------------------------------------- // | tpadmin [a web admin based ThinkPHP5] // +---------------------------------------------------------------------- // | Copyright (c) 2016 tianpian All rights reserved. // +---------------------------------------------------------------------- // | Licensed ( http://www.apache.org/licenses/LICENSE-2.0 ) // +---------------------------------------------------------------------- // | Author: tianpian <tianpian0805@gmail.com> // +---------------------------------------------------------------------- //------------------------ // 测试一模型 //------------------------- namespace app\admin\model; use think\Model; class TestOne extends Model { // 指定表名,不含前缀 protected $name = 'test_one'; // 开启自动写入时间戳字段 protected $autoWriteTimestamp = 'int'; } ``` ##生成数据表 下面是 Linux 版 Navicat 截图 ![](https://box.kancloud.cn/47f80669b3c6820f47aa7014835945cd_574x352.png) 下面是从 Linux 版 Navicat 中拷贝出的建表语句 ``` CREATE TABLE `tp_test_one` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '测试一主键', `name` varchar(255) DEFAULT NULL COMMENT '姓名', `sex` tinyint(1) DEFAULT NULL COMMENT '性别', `mobile` char(11) DEFAULT NULL COMMENT '手机', `degree` varchar(255) DEFAULT NULL COMMENT '学历', `remark` varchar(255) NOT NULL COMMENT '备注', `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态,1-正常 | 0-禁用', `create_time` int(11) unsigned NOT NULL COMMENT '创建时间', `update_time` int(11) unsigned NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `id` (`id`), KEY `mobile` (`mobile`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='测试一'; ``` ##生成日志 runtime/log 目录下的日志原文: >[info] 在当天的日志中搜索 build_sql 即可搜索到,日志原文中的标记是 BUILD_SQL ``` --------------------------------------------------------------- [ 2016-10-26T14:59:45+08:00 ] 127.0.0.1 127.0.0.1 POST /admin/generate/generate.html [ log ] tpadmin.dev/admin/generate/generate.html [运行时间:0.071346s][吞吐率:14.02req/s] [内存消耗:2,769.85kb] [文件加载:58] [ sql ] BUILD_SQL: DROP TABLE IF EXISTS `tp_test_one`; CREATE TABLE `tp_test_one` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT '测试一主键', `name` varchar(255) COMMENT '姓名', `sex` tinyint(1) COMMENT '性别', `mobile` char(11) COMMENT '手机', `degree` varchar(255) COMMENT '学历', `remark` varchar(255) NOT NULL COMMENT '备注', `status` tinyint(1) unsigned NOT NULL DEFAULT '1' COMMENT '状态,1-正常 | 0-禁用', `create_time` int(11) unsigned NOT NULL COMMENT '创建时间', `update_time` int(11) unsigned NOT NULL COMMENT '更新时间', PRIMARY KEY (`id`), KEY `id` (`id`), KEY `mobile` (`mobile`) )ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT '测试一'; ```