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

本文介绍如何在Laravel框架中实现表单数据的有效验证,包括必填项检查及数据库中值的唯一性验证。文章详细展示了两种验证方法:直接在控制器中使用验证功能和通过创建独立的验证类来实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

这里就使用到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']);

    }

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值