laravel 表单验证

laravel 表单验证

表单验证,可以用一下三种方式实现验证。

1、常规验证

copyuse Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

public function update(Request $request)
{
    $params = $request->all();
    $validate = Validator::make($params, [
        'name' => 'bail|required',
        'status' => 'bail|required|integer',
    ], [
        'name.required' => '请填写名称',
        'status.required' => 'status参错错误',
        'status.integer' => 'status参错错误',
    ]);
    if ($validate->fails()) {
        $msg = $validate->errors()->first();
        return response()->json(['error' => 1, 'msg' => $msg, 'data' => []]);
    }
    
    //--验证成功后,业务代码...
}

2、封装一个方法验证

copy/**
     * 验证参数
     * @param $params
     * @param string $type 类型
     * @return array
     */
    private function _validate($params, $type = 'store')
    {
        $rules = [];
        $messages = [];
        $return = ['error' => 0, 'msg' => '', 'data' => []];

        switch ($type) {
            case 'store':
                $rules = [
                    'name' => 'bail|required',
                    'status' => 'bail|required|integer',
                ];
                $messages = [
                    'name.required' => '请填写名称',
                    'status.required' => 'status参错错误',
                    'status.integer' => 'status参错错误',
                ];
                break;
            case 'update':
                $rules = [
                    'id' => 'bail|required',
                    'name' => 'bail|required',
                    'status' => 'bail|required|integer',
                ];
                $messages = [
                    'id.required' => 'ID有误',
                    'name.required' => '请填写名称',
                    'status.required' => 'status参错错误',
                    'status.integer' => 'status参错错误',
                ];
                break;
        }

        $validate = Validator::make($params, $rules, $messages);
        if ($validate->fails()) {
            $msg = $validate->errors()->first();
            $return['error'] = 1;
            $return['msg'] = $msg;
        }

        return $return;
    }

调用

copyuse Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;

public function update(Request $request)
{
    $params = $request->all();
	$rs = $this->_validate($params, 'update');
    if ($rs['error'] != 0) {
        return response()->json([
            'error' => $rs['error'], 
            'msg' => $rs['msg'], 
            'data' => $rs['data']
        ]);
    }
    //--验证成功,业务操作...
}

3、创建请求类验证

copyphp artisan make:request FormRequest
php artisan make:request CreateOrUpdateRequest

FormRequest的目的是重写 failedValidation,将验证错误信息返回。

copy<?php

namespace App\Http\Requests;

use Illuminate\Contracts\Validation\Validator;
use Illuminate\Foundation\Http\FormRequest as BaseFormRequest;
use Illuminate\Http\Exceptions\HttpResponseException;

class FormRequest extends BaseFormRequest
{
    protected function failedValidation(Validator $validator) {
        $error= $validator->errors()->all();
        throw new HttpResponseException(
            response()->json(['error'=>'1','msg'=>$error[0],'data'=>[]])
        );
    }
}
copy<?php

namespace App\Http\Requests;

class CreateOrUpdateRequest extends FormRequest	//继承上面的FormRequest
{
    public function authorize()
    {
        return true;
    }

    public function rules()
    {
        $rules = [
            'name' => 'required|max:255'
        ];
		
        //根据请求方式来判断,新增还是编辑,post=新增,put=编辑
        switch ($this->method()) {
            case 'POST':
                $rules['status'] = 'bail|required|integer';
                break;
            case 'PUT':
                $rules['id'] = 'bail|required';
                $rules['status'] = 'bail|required|integer';
                break;
        }

        return $rules;
    }

    public function messages()
    {
        return [
            'name.required' => '名称必填',
            'name.max'  => '名称过长',
        ];
    }
}

调用

copy//直接注入,即完成验证
public function update(CreateOrUpdateRequest $request)
{
    $data = $request->validated();
    //返回已验证的参数值,会过滤掉没有参与验证的参数
}
posted @   pine007  阅读(393)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示

目录导航