ASCII码 ASCII码

laravel 表单验证实现多个字段组合后唯一

发布于:2022-03-24 11:40:27  栏目:技术文档

这篇文章主要介绍了laravel 表单验证实现多个字段组合后唯一,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Laravel 表单验证器的几种使用方法1、使用控制器的 validate 方法进行参数验证

  1. /**
  2. * 保存一篇新的博客文章。
  3. *
  4. * @param Request $request
  5. * @return Response
  6. */
  7. public function store(Request $request)
  8. {
  9. $this->validate($request, [
  10. 'title' => 'required|unique:posts|max:255',
  11. 'body' => 'required',
  12. ]);
  13. // 文章内容是符合规则的,存入数据库
  14. }

2、手动创建验证器实例进行验证使用默认的验证信息

  1. /**
  2. * 保存一篇新的博客文章。
  3. *
  4. * @param Request $request
  5. * @return Response
  6. */
  7. public function store(Request $request)
  8. {
  9. $rules = [
  10. 'title' => 'required|unique:posts|max:255',
  11. 'body' => 'required',
  12. ];
  13. $validator = Validator::make($request->all(), $rules);
  14. if ($validator->fails()) {
  15. return redirect('post/create')->withErrors($validator)->withInput();
  16. }
  17. // 文章内容是符合规则的,存入数据库
  18. }

使用自定义的验证信息

  1. /**
  2. * 保存一篇新的博客文章。
  3. *
  4. * @param Request $request
  5. * @return Response
  6. */
  7. public function store(Request $request)
  8. {
  9. $rules = [
  10. 'title' => 'required|unique:posts|max:255',
  11. 'body' => 'required',
  12. ];
  13. $messages = [
  14. 'title.required' => '请填写文章标题',
  15. 'title.unique' => '文章标题不能重复',
  16. 'title.max' => '文章标题不能超过255个字符',
  17. 'body.required' => '请填写文章内容',
  18. ];
  19. $validator = Validator::make($request->all(), $rules, $messages);
  20. if ($validator->fails()) {
  21. return redirect('post/create')->withErrors($validator)->withInput();
  22. }
  23. // 文章内容是符合规则的,存入数据库
  24. }

3、创建表单请求进行验证创建表单请求文件:php artisan make:request ExampleRequest表单请求文件内容:

  1. <?php
  2. namespace App\Http\Requests;
  3. use Illuminate\Contracts\Validation\Validator;
  4. use Illuminate\Foundation\Http\FormRequest;
  5. use Illuminate\Http\Exceptions\HttpResponseException;
  6. use Illuminate\Http\JsonResponse;
  7. class ExampleRequest extends FormRequest
  8. {
  9. /**
  10. * Determine if the user is authorized to make this request.
  11. *
  12. * @return bool
  13. */
  14. public function authorize()
  15. {
  16. return true;
  17. }
  18. /**
  19. * Get the validation rules that apply to the request.
  20. *
  21. * @return array
  22. */
  23. public function rules()
  24. {
  25. return [
  26. 'title' => 'required|max:20',
  27. 'name' => ['required', new Uppercase()],
  28. ];
  29. }
  30. /**
  31. * 获取已定义的验证规则的错误消息。
  32. *
  33. * @return array
  34. */
  35. public function messages()
  36. {
  37. return [
  38. 'title.required' => 'A title is required',
  39. 'title.max' => 'The title may not be greater than 20 characters.',
  40. ];
  41. }
  42. /**
  43. * 兼容 form 表单请求与 ajax 请求或者 json api 请求
  44. * 验证失败,返回错误信息
  45. *
  46. * @param Validator $validator
  47. * @throws
  48. */
  49. protected function failedValidation(Validator $validator)
  50. {
  51. if ($this->wantsJson() || $this->ajax()) {
  52. throw new HttpResponseException(
  53. new JsonResponse([
  54. 'code' => 500,
  55. 'msg' => $validator->errors()->first(),
  56. 'data' => new \stdClass()
  57. ])
  58. );
  59. } else {
  60. parent::failedValidation($validator);
  61. }
  62. }
  63. }

在控制器中使用 ExampleRequest

  1. <?php
  2. namespace App\Http\Controllers;
  3. use App\Http\Controllers\Controller;
  4. use App\Http\Requests\ExampleRequest;
  5. class ExampleController extends Controller
  6. {
  7. public function valid(ExampleRequest $request)
  8. {
  9. $params = $request->all();
  10. dd($params);
  11. }
  12. }

在laravel 表单验证中,常会遇到需要几个字段组合起来做唯一限制。解决方案如下:

  1. where[] = ['parentId','=',where[]=[′parentId ′,′ = ′,this->request->get('parentId')];
  2. return [
  3. 'menuTitle' => ['required', 'max:32','min:2',Rule::unique('admin_menu','menuTitle')->where(function($query)use($where){
  4. $query->where($where)->whereNull('deleted_at');
  5. })->ignore($id) ],
  6. 'menuTitleEn' => ['required', 'max:32','min:2',Rule::unique('admin_menu','menuTitleEn')->where(function($query)use($where){
  7. $query->where($where)->whereNull('deleted_at');
  8. })->ignore($id) ],
  9. 'menuRoute' => ['required',Rule::unique('admin_menu','menuRoute')->ignore($id)],
  10. 'menuIcon' => ['required', 'min:2','max:32'],
  11. 'routeName' => ['sometimes', 'min:2','max:32'],
  12. 'parentId' => ['required','numeric'],
  13. 'order'=>['sometimes','numeric']
  14. ];

到此这篇关于laravel 表单验证实现多个字段组合后唯一的文章就介绍到这了。

相关推荐
阅读 +