多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## **表单自动操作** ThinkLibrary 表单处理可能简化数据保存与更新操作, 控制器只需要一行代码,就可以实现数据添加与更新,如: ```php $this->_form('表名','模板名称'); ``` 当然,这里使用了`HttpResponseException`直接输出,不需要返回内容的。 需要给模板额外赋值,可以直接在控制器`$this->username='你的值';` 这样在模板中可以直接使用`$username`变量; 如果提交的表单数据包含指定主键时则为更新操作,否则为添加记录; 另外对表单还有`callback`操作(参数使用引用),统一名称为`protected function _form_filter(&$data)` 另外关于模板的使用,可以参考下demo哦。 ----- #### 数据回调处理 对于表单操作,`Controller`内置了两个回调方法,如: ```php [_ACTION]_form_filter($vo) [_ACTION]_form_result($result, $vo) ``` 当回调函数返回`false`时,`Controller`默认的行为将不会执行。 ----- #### 数据回调处理DEMO ~~~ /** * 添加拼团 * @auth true */ public function add() { $this->title = '添加拼团'; $this->_form($this->table, 'form'); } /** * 编辑拼团 * @auth true */ public function edit() { $this->title = '编辑拼团'; $this->_form($this->table, 'form'); } /** * 添加拼团商品表单处理 * @param array $data * @throws \think\db\exception\DataNotFoundException * @throws \think\db\exception\ModelNotFoundException * @throws \think\exception\DbException */ protected function _form_filter(&$data) { if (empty($data['code'])) $data['code'] = Data::uniqidNumberCode(10); if ($this->request->isGet()) { $map = ['package_code' => $data['code']]; $data['list'] = Db::name('StoreGoodsGroupList')->where($map)->select(); } else { if (empty($data['logo'])) $this->error('请上传商品图标图片'); if (empty($data['image'])) $this->error('请上传商品展示图片'); if (empty($data['item_number'])) $this->error('请添加套卡包含内容'); $all = []; foreach (array_keys($data['item_number']) as $key) $all[] = [ 'package_code' => $data['code'], 'goods_code' => $data['item_code'][$key], 'goods_type' => $data['item_type'][$key], 'goods_title' => $data['item_title'][$key], 'goods_number' => $data['item_number'][$key], ]; try { Db::transaction(function () use ($data, $all) { $map = ['package_code' => $data['code']]; Db::name('StoreGoodsGroupList')->where($map)->delete(); Db::name('StoreGoodsGroupList')->insertAll($all); }); } catch (Exception $e) { $this->error("商品详情处理失败,{$e->getMessage()}"); } } } /** * 表单结果处理 * @param boolean $result */ protected function _form_result($result) { if ($result && $this->request->isPost()) { $this->success('商品编辑成功!', 'javascript:history.back()'); } } ~~~ 如果是在 ThinkAdmin 后台基于 admin.js 的情况下,可使用 form[data-auto] 来与 $this->_form 配合使用。