[TOC] ## 表单赋值 如果你希望在添加的时候给某些字段设置默认值。 ### 基本方法 ~~~ $this->setFormValue('date', date('Y-m-d')); $this->setFormValue('title', '我是标题'); // $this->setFormValue('字段名', '值'); ~~~ ### get参数赋值 比如一个添加的url地址:`http://www.woo.com/run/Test/create.html?title=aa` ![](https://img.kancloud.cn/35/2b/352b80d25b115cace459f1faff44b21d_358x114.png) title字段自动赋值为你指定的了 父模型id的参数名统一为:`parent_id`,系统会自动识别 ### 自动赋值 除了上面的get参数会对指定字段自动赋值意外,系统还会对下面字段自动赋值: `admin_id`:自动赋值为当前后台登录者的用户id,该字段表示后台发布者 `is_verify`:自动赋值为系统配置中的`admin_default_verify`配置项值,该字段表示审核字段 `list_order`:默认自动增长,该字段用于排序 ## 动态表单 我希望某个字段添加和修改的时候表单类型不一样,怎么办? ~~~ public function create() { // 模型的form 就是一个数组 如果仅希望在添加的时候才发生的变化,这里对变化进行动态赋值就是了 // 如:添加的时候把字段关闭了 $this->mdl->form['title']['elem'] = 0; return call_user_func(['parent', __FUNCTION__]); } ~~~ ## 自定义表单布局回调 ~~~ protected function setFormGrid() { // $this->formPage 就是FormPage构建器的实例 // 自行创建表单分组 必须定义一个叫basic的分组 $this->formPage->setTab('gaoji', '高级信息'); $this->formPage->setTab('basic', '基本信息'); // 给指定tab组下添加栅格 //通过setGrid(string 栅格标识符, string 栅格标题, int 栅格占用格数, array [分配到该栅格下的字段列表,数组的顺序就是字段输出的顺序], string layui图标 默认无) 添加一个栅格 // 没有分配的字段都自动加入到basic组下的第一个栅格中 $this->formPage->switchTab('basic')->setGrid('a', '', 8, ['a']) ->setGrid('b', '统计信息', 4, ['b', 'c']); // gaoji组下如果不分栅格,就直接setTabItems给该组分配字段 //$form->switchTab('gaoji')->setTabItems(['d', 'e', 'f', 'g']); $this->formPage->switchTab('gaoji')->setGrid('c', '', 6, ['d','e']) ->setGrid('d', '标题', 6, ['f', 'g']); // 甚至更复杂的表单布局 // 可以参考 Model,Field,cms.Document等有自定义布局 // 这个时候表单项都已经创建好了 //pr($this->formPage->collection);// 查看当前有哪些表单项 $this->formPage->removeFormItem('title');// 删除表单项 } ~~~ 通过可以`setFormGrid`回调自己写自定义表单布局的代码,对应有复杂(自定义)布局的需求;这个时候所有表单项已经自动创建好了。 更多自定义布局,请参考文档:[https://www.kancloud.cn/laowu199/e_dev/2058092](https://www.kancloud.cn/laowu199/e_dev/2058092);文档中的的`$form`在这里换成`$this->formPage`。 其实还有几个回调,但感觉这一个就够了,其他几个就不做介绍了。有兴趣了解的可以看AdminController的create方法源码。 ## 自定义模板文件 所有新增操作使用的是同一个模板文件`woo\admin\view\form.html`。 如果你希望当前新增操作自定义一个模板文件,可以在应用的下的view试图目录中以当前控制器的“小写+下划线”创建一个目录,在该目录下创建"form.html";然后把默认的表单模板内容复制过来就完成了自定义模板文件的需求。 ~~~ {extend name="$extend_form"/} {block name="script"} <script> </script> {/block} ~~~ 如果你不希望自定义的文件名叫"form.html",你可以: ~~~ public function create() { $this->local['fetch'] = 'create'; return call_user_func(['parent', __FUNCTION__]); } ~~~ ## 其他的可配置的 ~~~ $this->local['header_title'] = '自定义标题'; // 默认是“xxx新增” $this->local['return_list_url'] = (string) url('xxx'); // 自定义返回列表的链接 同时也是 添加成功以后 返回的链接 ~~~