在开发的过程中会发现,后台与会员中心很多功能都是没有模板的,那就是使用了自动表单器 不用创建模板,而使用表单器生成模板的好处就是: 让开发者把精力都花在逻辑处理上,力气要花在刀刃上, 而没必要浪费太多的精力去制作模板。 *自动表单器的核心文件是*, 这里采用的是PHP新特性 trait 方便前台与后台分别调用. `\application\common\traits\AddEditList.php` 里边包含了几个最常使用的方法, 新增 add() 修改 edit() 列表index() 删除 delete() 如果是简单的使用,你直接继承,不需要重写, 如果是复杂的应用,你可能需要重写一下这几个方法 以下就是一个使用示范 ~~~ <?php namespace app\admin\controller; use app\common\controller\AdminBase; use app\common\traits\AddEditList; //引用表单器核心文件 use app\common\model\Hook as HookModel; use app\common\model\Hook_plugin as Hook_pluginModel; class Hook extends AdminBase { use AddEditList; //使用表单器里边的所有方法 protected $validate = ''; protected $model; //操作数据表的模型 //下面这个是修改与新增要用到的表单元素. protected $form_items = [ ['text', 'name', '接口标志'], ['text', 'about', '接口描述'], ['radio', 'ifopen', '是否启用', '', ['禁用','启用'], 1], ]; protected $list_items; //列表页元素 protected $tab_ext; //其它扩展元素 protected function _initialize() //初始化 { parent::_initialize(); //父级初始化不能漏掉 $this->model = new HookModel(); //要操作的数据表模型 //其它附属扩展元素 $this->tab_ext = [ 'page_title'=>'预埋接口管理', //页面标题 //页面头部按钮 'top_button'=>[ [ 'title'=>'添加接口', 'url'=>url('add'), 'icon' => 'fa fa-plus-circle', 'class' => '', ], [ 'title'=>'钩子管理(实现接口的功能)', 'url'=>url('hook_plugin/index'), 'icon' => 'fa fa-microchip', 'class' => '', ], ], ]; //列表元素,因为这里用到了函数,所以必须要在这里定义 $this->list_items = [ ['name', '接口标志', 'text'], ['about', '接口描述', 'text'], ['num', '实现接口的钩子个数', 'callback',function($key,$rs){ $num = Hook_pluginModel::where('hook_key',$rs['name'])->count('id'); return $num?'<a title="查看接口(钩子)插件" icon="fa fa-microchip" class="btn btn-xs btn-default" href="'.url('hook_plugin/index',['hook_key'=>$rs['name']]).'" target="_self"><i class="fa fa-microchip"></i> '.$num.'个</a>':'无插件可用'; },'__data__'], ['ifopen', '是否启用', 'switch'], ]; } } ~~~ 注意事项:使用表单器的步骤 第一步,引用表单器文件 `use app\common\traits\AddEditList; ` 第二步,在当前类里边的最开始位置,加入如下代码,才能正式使用 `use AddEditList;` 第三步,必须要指定操作哪个数据表模型 比如上面的示范是 `use app\common\model\Hook as HookModel;` 第四步,实例化数据表模型 `$this->model = new HookModel(); ` 第五步,列表页的元素 表单新增 与 修改的元素,你可以在 类的属性那里定义,比如 ~~~ protected $form_items = [ ['text', 'name', '接口标志'], ['text', 'about', '接口描述'], ['radio', 'ifopen', '是否启用', '', ['禁用','启用'], 1], ]; ~~~ 也可以在 ~~~ protected function _initialize() { } ~~~ 控制器初始化的方法也里定义. 另外也可以在具体的 index() add() edit() 这几个方法里边定义. 注意,如果要用到函数的话,就不能在类的属性那里定义 ,必须要在 `_initialize()` 或 ` index()` `add()` `edit()` 方法里边定义 注意:表单器最基本的两个属性是 `protected $form_items` 与 ` protected $list_items` 。 `protected $form_items` 是新增 或者是修改 用到的表单元素, 如果修改与增加不一样的话,可以分别在对应的add() edit() 方法里边重新定义. ` protected $list_items` 是列表页要显示的元素 另外还有一个用得比较的扩展元素如下: ~~~ $this->tab_ext = [ 'page_title'=>'预埋接口管理', //页面标题 //顶部菜单 'top_button'=>[ [ 'title'=>'添加接口', 'url'=>url('add'), 'icon' => 'fa fa-plus-circle', 'class' => '', ], [ 'title'=>'钩子管理(实现接口的功能)', 'url'=>url('hook_plugin/index'), 'icon' => 'fa fa-microchip', 'class' => '', ], ], ]; ~~~ 当然,如果太特殊的页面,还是建议你创建一个模板,那样更灵活。 你可以按对应的目录创建一个模板,系统就会调用你创建的模板,而不会再使用表单器自动生成模板. 实际上后台对应的模板目录是: ~~~ \template\admin_style\default(可以是其它风格目录)\admin\alonepage(即控制器的文件名)\add.htm(即方法名) ~~~ 模块的话将是 ~~~ \template\admin_style\default(可以是其它风格目录)\bbs(频道名称)\sort(即控制器的文件名)\add.htm(即方法名) ~~~ 自动表单器主要针对两种情况, 一种是填写表单,他包括新增与修改 另一种是列表 ,所以对于后台操作来说,基本上就是这两种 填写表单一般是以下这种形式 ~~~ protected $form_items = [ ['text', 'title', '标题'], ['text', 'descrip', '分享描述'], ['image', 'picurl', '分享图片'], ['text', 'template', '模板路径','路径要包含风格名,只能放在index_style目录下,比如:“qiboxx/index/alonepage/pc_index.htm”'], ['radio', 'status', '是否启用', '', [1 => '启用', 0 => '禁用'], 1], ['ueditor', 'content', '内容'], ]; ~~~ 上面是类的初始化就定义了,在方法里边可以这样 ~~~ $this->form_items = [ ['text', 'title', '标题'], ['text', 'descrip', '分享描述'], ['image', 'picurl', '分享图片'], ['text', 'template', '模板路径','路径要包含风格名,只能放在index_style目录下,比如:“qiboxx/index/alonepage/pc_index.htm”'], ['radio', 'status', '是否启用', '', [1 => '启用', 0 => '禁用'], 1], ['ueditor', 'content', '内容'], ['callback','pay_status', '支付与否','',function($value,$info){ return $value; }], ]; ~~~ 第一项是表单类型,目前有以下表单类型,有些是用得非常多,有些就用得非常少.大家掌握常用的几个即可 ~~~ 'text' => '单行文本', 'textarea' => '多行文本', 'ueditor' => 'UEditor 百度编辑器', 'radio' => '单选按钮', 'checkbox' => '多选按钮', 'checkboxtree' => '树状多选按钮', 'select' => '下拉框', 'image' => '单张图片', 'file' => '单个文件', 'images' => '多张图片', 'images2' => '多张图片附带介绍及网址', 'files' => '多个文件', 'money' => '金额', 'number' => '数字', 'time' => '时间', 'date' => '日期', 'datetime' => '日期+时间', 'static' => '只读文本', 'hidden' => '隐藏', 'array' => '数组', 'usergroup' => '用户组', 'password' => '密码', 'icon' => '字体图标', 'bmap' => '百度地图', 'callback' => '自定义匿名函数', ~~~ 第二项就是表单字段的变量名 第三项就是表单的标题描述 第四顶是详细说明描述 第五项是非常特殊的, 他有可能是表单的默认值,也有可能是表单的参数.还有可能是**匿名函数** 对于参数而言,比如一般用得比较多的就是单选\多选\下拉\ 要给他们赋值一个数组,这样他们才有选择项, 所以对他们来说第五项就是数组.其它形式的表单类型大部分都是表单默认值 如果第5项是参数的话,那第6项就是默认值. * * * * * * * * * * 下面接着再讲解列表项 列表项是类似下面的格式 ~~~ $this->list_items = [ ['text', '描述', 'text'], ['title', '单独页名称', 'link',iurl('index/alonepage/index',['id'=>'__id__']),'_target'], ['posttime', '发布时间', 'datetime'], ['status', '是否启用', 'switch'], ]; ~~~ 第一项是数据表的字段名 第二项是名称 第三项就是列表里展示的形式. 他的展示形式常用有以下几种 text 这是最常用,直接显示文本 text.edit 可修改的文本 link 文本加超级链接 datetime 日期 select 可更换的下拉菜单 select2 不可更换的下拉菜单 yesno 是否图标显示 switch 是更换的切换是或否选项 username 显示用户名 callback 回调函数 设置link的话.还要设置第4项为超级链接地址 设置为 select select2 还要给第4项赋值数组,才知道对应的数字显示什么文本 设置为 callback 还要给第4项添加一个回调函数