laravel表单验证提示和自定义验证词库

  • 需求:在用户在提交表单数据的时候,对用户提交的数据进行验证,如合规,唯一性等等

这里就使用到laravel中的验证功能了

验证的使用

  • 这里就简单的使用一下这个功能,这里我们创建一个表单,模拟注册功能,只有用户名和密码选项进行提交
    在这里插入图片描述
    我们创建一个用户admin密码123456,第一次能够创建成功。如果下一次再次有使用admin进行注册将进行提示。

在表单页面中加入错误提示的代码块

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
@if (count($errors) > 0)
    <div class="alert alert-danger">
        <ul>
            @foreach ($errors->all() as $error)
                <li>{
    
    {
    
     $error }}</li>
            @endforeach
        </ul>
    </div>
@endif

<form method="post" action="/test">
    @csrf
    <input name="name" type="text">
    <input name="password" type="text">
    <button type="submit">提交</button>
</form>

</body>
</html>
  • 方法一 :在方法里面直接写验证方法,这里我们要求表单输入的规则
public function test(Request $request)
    {
    
    

        $this->validate($request, [
            'name' => 'required|unique:user',//name字段为必须字段,并且在数据库里面唯一
            'password' => 'required'//password字段为必须提交字段
        ]);

        Uu::create($request->all());

        return response()->json(['code'=>200,'msg'=>'create ok']);

    }

我们提交一个空的表单,提交数据无法通过验证,从而返回提示信息到页面,起到提示作用
在这里插入图片描述
填写重复的name
在这里插入图片描述

这里的验证提示为英文,我们需要引入语言拓展包,修改成中文提示

composer require “overtrue/laravel-lang:~3.0”

修改 config/app.php 配置文件,将Illuminate\Translation\TranslationServiceProvider::class, 替换为 Overtrue\LaravelLang\TranslationServiceProvider::class,,然后将 'locale' => 'en', 修改成 'locale' => 'zh-CN',
最后执行php artisan lang:publish zh-CN

在这里插入图片描述
在这里插入图片描述

  • 方法二:写一个验证类进行处理

php artisan make:request formValidate

在文件Requests/formValidate.php,写上上面的验证信息,在相应的方法中进行注入

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class formValidate extends FormRequest
{
    
    

    public function authorize()
    {
    
    
        return true;
    }

    public function rules()
    {
    
    
        return [
            'name' => 'required|unique:user',
            'password' => 'required'
        ];
    }
}

方法中使用,分离出了验证规则信息

 public function test(formValidate $request)
    {
    
    

        Uu::create($request->all());

        return response()->json(['code'=>200,'msg'=>'create ok']);

    }

新增一个表单name名为wbb的提交项,来进行验证
在这里插入图片描述
这里我们看见,name,password都能够被解析成相应的中文,但是wbb无法被解析。这个时候我们需要加入wbb的词库。
在这里插入图片描述

validation.php中的attributes中加入词库

在这里插入图片描述
在这里插入图片描述

自定义验证

加上词库之后就已经生效了,但是这样还是有一个问题,name,password,wbb这些对应的词库现在是全局配置的。在一个系统中的表单中可能出现同一个字段叫不同名字。比如name有些是姓名,有些叫用户名,有些叫昵称等,统一返回名称准确。

  • 这里我们进行自定义,我们返回的提示会用户名,下面分两种方式去处理

  • 方法一:formValidate.php文件中自定义

<?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class formValidate extends FormRequest
{
    
    

    public function authorize()
    {
    
    
        return true;
    }

    public function rules()
    {
    
    
        return [
            'name' => 'required|unique:user',
            'password' => 'required',
            'wbb'=>'required'
        ];
    }


    public function messages(){
    
    

        return [
            'name.required'=>'请输入用户名',
            'name.unique' =>'用户名已经存在'
        ];
    }
}

在这里插入图片描述
在这里插入图片描述

  • 方法二:方法体中直接书写
public function test(Request $request)
    {
    
    
        $rules = [
            'name' => 'required|unique:user',
            'password' => 'required',
            'wbb'=>'required'
        ];

        $messages = [
            'name.required'=>'请输入用户名',
            'name.unique' =>'用户名已经存在'
        ];
        $validate = Validator::make($request->all(),$rules,$messages);

        if ($validate->fails()){
    
    
            return back()->withErrors($validate);
        }

        Uu::create($request->all());

        return response()->json(['code'=>200,'msg'=>'create ok']);

    }

效果相同,验证的信息也被自定义了,没有使用全局定义的词库

おすすめ

転載: blog.csdn.net/weixin_43674113/article/details/115211105