1. 程式人生 > >11.Laravel5學習筆記:擴充套件 Validator 類

11.Laravel5學習筆記:擴充套件 Validator 類

簡介

Laravel5 中,本身已經提供了豐富的驗證規則供我們使用,但是天下應用奇葩多,做為程式設計師你會發現永遠都有新的驗證規則誕生,光是組合已經拯救不了你的專案了。這個時候就需要我們擴充套件 Validator 類,來使之幫助專案繼續健康向前發展。

官方給了多種擴充套件 Validator 的方式,我獨愛直接擴充套件該類,但是關於這一點,官文中又寫的寥寥數語,確實新人有些無奈。這裡詳細說一下,如何擴充套件它。

擴充套件驗證類

  • 首先,擴充套件的收個問題是,我的擴充套件類應該放在哪兒才好呢?我的意見是:直接在app目錄下,建立一個目錄: app/Extensions ,然後這個目錄中專門用來存放你的各類擴充套件。

  • 建立目錄後,我們在這個目錄中建立一個php檔案 MyValidator.php 檔案。

<?php

namespace App\Extensions;

use Illuminate\Validation\Validator;
use App\Libary\Util\Validate;

/**
 * 
 * @desc 擴充套件驗證類
 * @author helei
 */
class MyValidator extends Validator
{
    /**
     * 驗證11位手機號碼
     */
    public function validateMobile
($attribute, $value) {
if (is_null($value)) { return false; } return Validate::isMobile(trim($value));// 這裡也可以直接將驗證規則寫在這裡 } }

這段程式碼表達了這麼一個主題:驗證輸入的手機號碼,是不是一個合法的手機號碼。有一個需要特別注意的是 [我們自定義的驗證方法,必須要以 validate 開頭]


  • 接下來就是要把我們寫的驗證類,註冊到容器中,關於 如何註冊自己的服務到容器 請參考這篇之前的文章

    這裡我還是在囉嗦一下,官方文件中,就給了這麼一句:

接下來,您需要註冊您自定義驗證器擴充套件:
Validator::resolver(function(translator,data, rules,messages)
{
return new MyValidator(translator,data, rules,messages);
});

老實說,我人比較SB,當時看到這裡的時候,我就鬱悶了,你讓我註冊,我在哪兒註冊呢?天下之大,處處可註冊,有沒有一個規範?說實話,還真沒有,真的是,你現在那個服務提供者裡邊註冊都行,既然如此,我就直接將這部分註冊程式碼寫在了 AppServiceProvider 裡邊。具體程式碼如下:

class AppServiceProvider extends ServiceProvider
{
    /**
     * Bootstrap any application services.
     *
     * @return void
     */
    public function boot()
    {
        /*註冊自定義驗證類*/
        /* Validator::resolver(function($translator, $data, $rules, $messages){
            return new SalonValidator($translator, $data, $rules, $messages);
        }); */
        $this->app['validator']->resolver(function ($translator, $data, $rules, $messages){
            return new SalonValidator($translator, $data, $rules, $messages);
        });
    }

OK,這裡寫了之後,請一定記得將該服務提供者寫到 app.php 這個配置檔案中去哈,如果你不知道怎麼寫,說明你沒有看我說的 這篇文章

到了這兒,還不算完,還有一步,那就官網如果驗證錯誤,都會給出提示資訊,這個提示資訊,我們在哪裡去弄呢?大家可以開啟 resources/lang/zh/validation.php 這個檔案,我的修改如下圖:
這裡寫圖片描述

這裡還有一點要說明哦,如果你要使用 zh 檔案下的資訊,請一定在 app/config/app.php 中將locale設定為locale=zh

這裡有些同學說,我們怎麼沒有zh這個檔案呢?其實這是laravel的語言包,網上相當的多啦。不過這裡為了大家方便,我免費放一個在CSDN上,供大家下載吧