天天看點

laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證

  • 需求:在使用者在送出表單資料的時候,對使用者送出的資料進行驗證,如合規,唯一性等等

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

    }
           

我們送出一個空的表單,送出資料無法通過驗證,進而傳回提示資訊到頁面,起到提示作用

laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證

填寫重複的name

laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證

這裡的驗證提示為英文,我們需要引入語言拓展包,修改成中文提示

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

laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證
laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證
  • 方法二:寫一個驗證類進行處理
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的送出項,來進行驗證

laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證

這裡我們看見,name,password都能夠被解析成相應的中文,但是wbb無法被解析。這個時候我們需要加入wbb的詞庫。

laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證

validation.php

中的

attributes

中加入詞庫

laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證
laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證

自定義驗證

加上詞庫之後就已經生效了,但是這樣還是有一個問題,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' =>'使用者名已經存在'
        ];
    }
}
           
laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證
laravel表單驗證提示和自定義驗證詞庫驗證的使用自定義驗證
  • 方法二:方法體中直接書寫
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']);

    }
           

效果相同,驗證的資訊也被自定義了,沒有使用全局定義的詞庫