天天看點

php必填參數校驗,laravel請求參數校驗方法

對于後端開發而言,前端request請求中的參數校驗是一個必不可少的環節。無論傳來的參數是id還是email還是其他的參數,我們都要對參數的類型、大小、格式等等做這樣或者那樣的校驗,然後才進行邏輯處理,以確定邏輯處理時萬無一失,不會出現異樣。于是乎,在controller層中就會出現一大坨的校驗代碼,這些校驗代碼甚至有時候都超過了正常的邏輯代碼的數量,對于程式的擴充和維護很不利的。

但是,laravel為我們提供了一個很好的服務去解決參數校驗這個問題,它就是----Validate。

首先,我們需要建一個路由,暫時就叫"test"吧,然後test對應着TestController中的test方法。

Route::get('test', '[email protected]');

class TestController extends Controller

{

public function test(Request $request)

{

}

}

假設請求的參數中需要id、title這兩個參數,并且id必須是數字,且長度是1到10,并且是DB中的一行資料的主鍵、title必須是字元串,id和title都不能為空。一般的架構在寫的時候就會先取到id和title,然後對取到的id和title進行“是否是空”、“是否長度在1到10之間”、“通過id能否在資料庫中找到資料”等等繁瑣的校驗,利用laravel的“Validate”你隻需要這樣就可以了。

public function test(Request $request)

{

$validate = Validator::make($request->all(), [

'id' => 'required|integer|between:1,10',

'title' => 'required|string'

]);

如果沒有錯誤,就會繼續往下進行邏輯處理。假如說校驗不通過,例如id不在1和10之間,可以通過“validate”執行個體中的“errors()”方法,得到所有的錯誤,然後将錯誤放回給用戶端,如果想傳回錯誤隊列中的頭一個錯誤,就寫$validate->errors()->first(),如果想傳回所有錯誤清單,就寫“$validate->errors()->all()”。如下:

if($validate->fails())

{

return $validate->errors()->first();

}

或者傳回

if($validate->fails())

{

return $validate->errors()->all();

}

假如請求參數中的id不是一個數字,而是字元串,結果就會出現:

php必填參數校驗,laravel請求參數校驗方法

你可能會想:傳回結果能否使中文?答案當然是可以,你可以針對自己的程式,換成你任何想要的語言:

在項目中找到“resources”目錄下的“lang” 中的 “en”檔案夾中的“validation.php”檔案,

php必填參數校驗,laravel請求參數校驗方法

打開,然後找到這一行:

'integer' => 'The :attribute must be an integer.',

這句話除了“:attribute”是不是其他字和傳回結果一模一樣?或許你已經猜到了:這就是你調用的‘integer'方法的傳回結果,“:attribute”是個變量,是你傳的“id”!現在,你可以寫成任何語言,我把它改為中文:

'integer' => ':attribute 必須是數字!'

然後我們再看傳回結果:

php必填參數校驗,laravel請求參數校驗方法

完美!隻要你利用Validator的make方法,在請求參數數組中對應上‘integer'、“required”等字元串就可以利用laravel提供的服務,對請求參數進行“數字”、“判空”等校驗,laravel提供的衆多校驗方法,可以在laravel官網查詢。(ps:或者直接查詢validation.php這個檔案!)

你或許還會想:我現在校驗了id是否為空,id是否是數字,我還想校驗id對應的資料能否在資料庫中查得到!這能實作嗎?

答案是:完全可以!在上篇文章中我介紹了laravel核心是一個IOC容器,你可以很友善的擴充任何服務注入到容器中!自定義validate服務也不例外!

我們首先建立一個provider

php artisan make:provider TestProvider

然後在boot方法裡寫下:

public function boot()

{

Validator::extend('user', function($attribute, $value, $parameters) {

return !is_null(User::find($value));

});

}

這行代碼很好了解吧:1、調用“Validator”的“extend”方法。2、傳給他倆個參數,一個是“user”,一個是傳回值為boolen類型的callback 函數。3、函數中判斷User表中是否含有$value值資料,如果有,傳回true,如果沒有,傳回false。

然後在“config”的“app.php”中注冊上這個provider。(如果不清楚,可以去看前一篇文章“三分鐘學會laravel服務擴充”)

然後在validation.php中寫上:

'user' => '此使用者不存在!',

然後在校驗方法中添上“user”

$validate = Validator::make($request->all(), [

'id' => 'required|integer|between:1,10|user',

'title' => 'required|string'

]);

資料庫中插入資料,開始檢驗:

php必填參數校驗,laravel請求參數校驗方法

OK,大功告成!是不是很簡單?laravel架構是不是很強大?

以上這篇laravel請求參數校驗方法就是小編分享給大家的全部内容了,希望能給大家一個參考,也希望大家多多支援腳本之家。