Dcat Admin 文档 Help

表单回调

Form目前提供了下面几个方法来接收回调函数:

creating

在新增页面调用(非提交操作)

$form->creating(function (Form $form) { if (...) { // 验证逻辑 $form->responseValidationMessages('title', 'title格式错误'); // 如有多个错误信息,第二个参数可以传数组 $form->responseValidationMessages('content', ['content格式错误', 'content不能为空']); } });

editing

在编辑页面调用(非提交操作)

$form->editing(function (Form $form) { if (...) { // 验证逻辑 $form->responseValidationMessages('title', 'title格式错误'); // 如有多个错误信息,第二个参数可以传数组 $form->responseValidationMessages('content', ['content格式错误', 'content不能为空']); } });

submitted

在表单提交前调用,在此事件中可以修改、删除用户提交的数据或者中断提交操作

$form->submitted(function (Form $form) { // 获取用户提交参数 $title = $form->title; // 上面写法等同于 $title = $form->input('title'); // 删除用户提交的数据 $form->deleteInput('title'); // 中断后续逻辑 return $form->response()->error('服务器出错了~'); });

saving

保存前回调,在此事件中可以修改、删除用户提交的数据或者中断提交操作

$form->saving(function (Form $form) { // 判断是否是新增操作 if ($form->isCreating()) { } // 删除用户提交的数据 $form->deleteInput('title'); // 中断后续逻辑 return $form->response()->error('服务器出错了~'); });

saved

保存后回调,此事件新增和修改操作共用,通过第二个参数$result可以判断数据是否保存成功。

$form->saved(function (Form $form, $result) { // 判断是否是新增操作 if ($form->isCreating()) { // 自增ID $newId = $result; // 也可以这样获取自增ID $newId = $form->getKey(); if (! $newId) { return $form->error('数据保存失败'); } return; } // 修改操作 });
$form->saved(function (Form $form, $result) { // 在表單保存後獲取eloquent $form->repository()->eloquent()->update(['data' => 'new']); });

deleting

删除前回调

$form->deleting(function (Form $form) { // 获取待删除行数据,这里获取的是一个二维数组 $data = $form->model()->toArray(); });

deleted

删除后回调,通过第二个参数$result可以判断数据是否删除成功。

$form->deleted(function (Form $form, $result) { // 获取待删除行数据,这里获取的是一个二维数组 $data = $form->model()->toArray(); // 通过 $result 可以判断数据是否删除成功 if (! $result) { return $form->response()->error('数据删除失败'); } // 返回删除成功提醒,此处跳转参数无效 return $form->response()->success('删除成功'); });

uploading

图片、文件上传事件

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

图片、文件上传完毕事件

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 = (array) $response->getData(); // 文件上传成功 if ($response['status']) { // 文件访问地址 $url = $response['url']; } });

获取模型中的数据

$form->saved(function (Form $form) { $id = $form->getKey(); $username = $form->model()->username; // 获取最终保存的数组 $updates = $form->updates(); });

修改或删除用户提交的数据

此功能在savingsubmitted事件中有效

$form->select('author_id'); $form->saving(function (Form $form) { // 修改用户提交的数据 $form->author_id = 1; // 删除、忽略用户提交的数据 $form->deleteInput('author_id'); });

修改模型中的数据

修改模型中的数据需要配合隐藏表单使用。举例:

$form->hidden('author_id'); $form->saving(function (Form $form) { $form->author_id = 1; });

表单响应

详细用法请参考文档 动作和表单响应 章节。

redirect(局部刷新/单页刷新)

// 跳转并提示成功信息 $form->saved(function (Form $form) { return $form->response()->success('保存成功')->redirect('auth/user'); }); // 跳转并提示错误信息 $form->saved(function (Form $form) { return $form->response()->error('系统错误')->redirect('auth/user'); });

仅返回错误信息但不跳转

$form->saving(function (Form $form) { return $form->response()->error('系统异常'); });

也可以通过抛出异常的形式展示错误信息

$form->submitted(function ($form) { throw new \Exception('禁止访问'); });
S0ktw nrygk

返回字段验证出错信息

通过responseValidationMessages方法可以很方便的返回字段验证出错信息,而不需要使用Laravel validation功能。

普通使用

protected function form() { return Form::make(new Model(), function (Form $form) { if (...) { // 验证逻辑 $form->responseValidationMessages('title', 'title格式错误'); // 如有多个错误信息,第二个参数可以传数组 $form->responseValidationMessages('content', ['content格式错误', 'content不能为空']); } }); }

在事件中使用

$form->submitted(function (Form $form) { // 接收表单参数 $title = $form->title; if (...) { // 验证逻辑 $form->responseValidationMessages('title', 'title格式错误'); // 如有多个错误信息,第二个参数可以传数组 $form->responseValidationMessages('content', ['content格式错误', 'content不能为空']); } });
Last modified: 30 八月 2024