##开始使用
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"></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"></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"></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"> 提交 </button>
<button type="button" class="btn btn-default radius ml-20" onClick="layer_close();"> 取消 </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 '测试一';
```
- 概要
- 开始使用
- 写在前面
- 目录结构
- 模板主题支持
- 前置方法before支持
- 数据返回
- 异常接管
- Rbac 权限管理
- 开始使用
- 用户管理
- 分组管理
- 节点管理
- 角色管理
- 使用流程
- 其他
- 代码自动生成 v1.2
- 示例一 - 一级控制器
- 示例二 - 多级控制器
- 示例三 - 从数据表生成
- 示例四 - 指定生成的文件
- 示例五 - 命令行模式
- 示例六 - 模拟命令行模式
- 代码自动生成
- 示例一 - 一级控制器
- 示例二 - 多级控制器
- 控制器
- 公共控制器
- traits 多继承 Controller
- 公开不授权控制器
- 其他控制器
- 标签扩展
- 模板
- 网站操作日志
- 节点图
- 行为驱动
- 其他后端方法
- Excel一键导出
- Excel一键导入
- 文件下载
- 邮件发送
- 七牛文件上传
- id加密
- 前端
- ajax请求
- 表单校验
- 丰富弹层
- 异步操作
- 表格溢出
- 随机字符串
- 自动面包屑导航
- 动态加载文件
- 文件上传
- Tab 切换
- 图片预览
- 二维码生成
- 日历组件
- 升级指导
- 更新日志
- FAQ