天天看點

Laravel4中的Validator

不管寫接口還是寫web頁面,實質都是傳入參數,然後進行業務邏輯,然後再輸出具體内容。是以,對參數的驗證是不可避免的一個環節,比如傳過來的email是不是為空,是不是合法的email格式?laravel已經為phper想到簡化這種邏輯的辦法了。就是validator。

validator使用validator::make可以制造一個驗證器。然後使用驗證器判斷傳入的參數是否是合法的。

看make的定義:

$data是keyvalue的要驗證的資料

$rules是驗證的規則

$messages是提示資訊

$customattributes是設定屬性别名的

其中後兩個消息都是為了提示資訊而設定的

直接看一個例子,了解了就validator就了解了:

在這個例子中

如果你傳遞的參數為

/index?name=12321321321321321321321

會傳回:

input::all() 将所有參數傳入進行驗證

rule規定了email字段不能為空,它必須符合email的格式。rule規定了email字段不能為空,它必須符合email的格式。message 說明如果違反required規則的話,顯示錯誤的格式為:“:attribute 不能為空”

$attributes 說明了顯示的錯誤中email顯示為文字“電子郵件”

上面幾個設定加起來就導緻了最後參數沒傳email的時候顯示的錯誤資訊為:

“電子郵件 不能為空”

你一定會遇到比如要驗證是否手機号合法的問題,laravel的validator沒有提供手機号驗證的規則,因為每個國家的手機号規則是不統一的。

但是這個使用想使用validator做驗證怎麼辦呢?

然後在rule中就可以使用mobile做為規則了。

這種擴充驗證規則放到哪裡呢?

我建議是在filters同級目錄下增加一個validator.php,然後再start/global.php中

上面的那個例子中,message和message和attribute都需要在使用validator的時候自己定義,比較麻煩,有沒有更好的方法能統一設定呢?

validator的提示設定是按照語言來進行設定的。

語言設定是config目錄下的app.php裡面的locale界定的。預設為en。

而en對應的錯誤提示都在lang目錄下的en目錄裡面的validation.php中設定。

你可以看一眼lang/en/validation.php 就明白對應的英文提示資訊怎麼出來的了。

要設定中文提示:

修改config/app.php裡面的locale,設定為ch

建立 lang/ch/validation.php

修改validation.php檔案,将裡面的提示資訊修改為中文,注意提示資訊中的:attribute在顯示的時候會被替換成對應屬性名稱,attributes是設定屬性的中文名字的。

從這裡也就看出來了laravel對跨語言的支援是什麼樣子的。

lang下面的檔案夾除了validation.php之外還有分頁:pagination.php,提示:reminders.php檔案。