目录
▸
入门
简介
安装
1.x升级指南
版本升级
快速开始
开发前必读
主题与颜色
静态资源
视图与自定义页面
多应用(多后台)
JS组件
常见问题
Laravel Octane
▸
数据表格
基本使用
列的使用和扩展
列的显示和扩展
行的使用和扩展
工具栏
树状表格
组合表头
数据来源以及查询条件
关联关系
查询过滤
列过滤器
快捷搜索
规格筛选器
数据导出
快捷创建
行内编辑
事件
字段翻译
数据软删除
头部和脚部
表格异步渲染
▸
数据表单
基本使用
图片/文件上传
字段的使用
字段扩展
数据源
表单弹窗
关联关系
JSON表单
分步表单
表单验证
工具表单
事件以及表单响应
初始化
表单布局
字段翻译
字段动态显示
▸
数据详情
基本使用
字段显示
关联关系
字段显示扩展
初始化
字段翻译
▸
模型树
基本使用
▸
数据仓库
基本使用
▸
动作
基本使用
数据表格
数据表单
数据详情
模型树
▸
多语言
基本使用
▸
开发扩展
扩展基本使用
开发扩展
▸
页面组件
异步加载
图表
数据统计卡片
模态窗(Modal)
工具表单
下拉菜单
单/复选框
选项卡
警告框
提示窗
Markdown
卡片
▸
区块
区块基本使用
▸
动作以及表单响应
动作以及表单响应
▸
权限控制
权限控制
▸
菜单
菜单基本使用
▸
帮助函数
帮助函数
▸
开发工具
基本使用
▸
自定义登陆认证
自定义登录
▸
自定义头部导航
自定义头部导航条
▸
更新日志
BETA版本更新日志
更新日志
内容导航
1.x
2.x
事件以及表单响应
创建时间:2024-06-26 14:07:22 / 更新时间:2024-06-26 14:07:22
# 表单回调 `Form`目前提供了下面几个方法来接收回调函数: ### creating 在新增页面调用(非提交操作) ```php $form->creating(function (Form $form) { if (...) { // 验证逻辑 $form->responseValidationMessages('title', 'title格式错误'); // 如有多个错误信息,第二个参数可以传数组 $form->responseValidationMessages('content', ['content格式错误', 'content不能为空']); } }); ``` ### editing 在编辑页面调用(非提交操作) ```php $form->editing(function (Form $form) { if (...) { // 验证逻辑 $form->responseValidationMessages('title', 'title格式错误'); // 如有多个错误信息,第二个参数可以传数组 $form->responseValidationMessages('content', ['content格式错误', 'content不能为空']); } }); ``` ### submitted 在表单提交前调用,在此事件中可以修改、删除用户提交的数据或者中断提交操作 ```php $form->submitted(function (Form $form) { // 获取用户提交参数 $title = $form->title; // 上面写法等同于 $title = $form->input('title'); // 删除用户提交的数据 $form->deleteInput('title'); // 中断后续逻辑 return $form->response()->error('服务器出错了~'); }); ``` ### saving 保存前回调,在此事件中可以修改、删除用户提交的数据或者中断提交操作 ```php $form->saving(function (Form $form) { // 判断是否是新增操作 if ($form->isCreating()) { } // 删除用户提交的数据 $form->deleteInput('title'); // 中断后续逻辑 return $form->response()->error('服务器出错了~'); }); ``` ### saved 保存后回调,此事件新增和修改操作共用,通过第二个参数`$result`可以判断数据是否保存成功。 > {tip} 新增页面下,`$result`的值是新增记录的自增ID ```php $form->saved(function (Form $form, $result) { // 判断是否是新增操作 if ($form->isCreating()) { // 自增ID $newId = $result; // 也可以这样获取自增ID $newId = $form->getKey(); if (! $newId) { return $form->error('数据保存失败'); } return; } // 修改操作 }); ``` > {tip} `$form->repository()->model()`为当前新增或编辑后的eloquent ```php $form->saved(function (Form $form, $result) { // 在表單保存後獲取eloquent $form->model()->update(['data' => 'new']); }); ``` ### deleting 删除前回调 ```php $form->deleting(function (Form $form) { // 获取待删除行数据,这里获取的是一个二维数组 $data = $form->model()->toArray(); }); ``` ### deleted 删除后回调,通过第二个参数`$result`可以判断数据是否删除成功。 ```php $form->deleted(function (Form $form, $result) { // 获取待删除行数据,这里获取的是一个二维数组 $data = $form->model()->toArray(); // 通过 $result 可以判断数据是否删除成功 if (! $result) { return $form->response()->error('数据删除失败'); } // 返回删除成功提醒,此处跳转参数无效 return $form->response()->success('删除成功'); }); ``` ### uploading 图片、文件上传事件 > {tip} 文件上传是一个独立的api请求,这个事件内`redirect`方法是无效的。 ```php use Dcat\Admin\Form; use Dcat\Admin\Form\Field; use Dcat\Admin\Contracts\UploadField as UploadFieldInterface; use Symfony\Component\HttpFoundation\File\UploadedFile; $form->uploading(function (Form $form, UploadFieldInterface $field, UploadedFile $file) { // $file 即是当前上传的完整文件 /* @var Field $field */ // 获取文件上传字段名称 $column = $field->column(); }); ``` ### uploaded 图片、文件上传完毕事件 > 文件上传是一个独立的api请求,这个事件内`redirect`方法是无效的。 ```php use Dcat\Admin\Form; use Dcat\Admin\Form\Field; use Dcat\Admin\Contracts\UploadField as UploadFieldInterface; use Symfony\Component\HttpFoundation\File\UploadedFile; $form->uploaded(function (Form $form, UploadFieldInterface $field, UploadedFile $file, $response) { // $file 即是当前上传的完整文件 /* @var Field $field */ // 获取文件上传字段名称 $column = $field->column(); $response = $response->toArray(); // 文件上传成功 if ($response['status']) { // 文件访问地址 $url = $response['data']['url']; } }); ``` ### 获取模型中的数据 ```php $form->saved(function (Form $form) { $id = $form->getKey(); $username = $form->model()->username; // 获取最终保存的数组 $updates = $form->updates(); }); ``` ### 修改或删除用户提交的数据 此功能在`saving`和`submitted`事件中有效 ```php $form->select('author_id'); $form->saving(function (Form $form) { // 修改用户提交的数据 $form->author_id = 1; // 删除、忽略用户提交的数据 $form->deleteInput('author_id'); }); ``` ### 修改模型中的数据 修改模型中的数据需要配合隐藏表单使用。举例: ```php $form->hidden('author_id'); $form->saving(function (Form $form) { $form->author_id = 1; }); ``` ### 表单响应 > 此方法在`creating`、`editing`事件中均不可用。 详细用法请参考文档 [动作和表单响应](https://learnku.com/docs/dcat-admin/2.x/action-and-form-response/9690) 章节。 redirect(局部刷新/单页刷新) ```php // 跳转并提示成功信息 $form->saved(function (Form $form) { return $form->response()->success('保存成功')->redirect('auth/user'); }); // 跳转并提示错误信息 $form->saved(function (Form $form) { return $form->response()->error('系统错误')->redirect('auth/user'); }); ``` 仅返回错误信息但不跳转 ```php $form->saving(function (Form $form) { return $form->response()->error('系统异常'); }); ``` 也可以通过抛出异常的形式展示错误信息 ```php $form->submitted(function ($form) { throw new \Exception('禁止访问'); }); ``` ![](http://docs.oneself.icu:10010/storage/markdown/images/89a2930d3f4a9dea6ed3fa741ac0a8d2667bb00b44bf8.png) ### 返回字段验证出错信息 通过`responseValidationMessages`方法可以很方便的返回字段验证出错信息,而不需要使用`Laravel validation`功能。 普通使用 ```php protected function form() { return Form::make(new Model(), function (Form $form) { if (...) { // 验证逻辑 $form->responseValidationMessages('title', 'title格式错误'); // 如有多个错误信息,第二个参数可以传数组 $form->responseValidationMessages('content', ['content格式错误', 'content不能为空']); } }); } ``` 在事件中使用 > 此方法仅在`submitted`事件中可用 ```php $form->submitted(function (Form $form) { // 接收表单参数 $title = $form->title; if (...) { // 验证逻辑 $form->responseValidationMessages('title', 'title格式错误'); // 如有多个错误信息,第二个参数可以传数组 $form->responseValidationMessages('content', ['content格式错误', 'content不能为空']); } }); ```
上一文章
下一文章
返回顶部
返回主页
返回文档展示页