laravel請(qǐng)求參數(shù)校驗(yàn)方法
對(duì)于后端開(kāi)發(fā)而言,前端request請(qǐng)求中的參數(shù)校驗(yàn)是一個(gè)必不可少的環(huán)節(jié)。無(wú)論傳來(lái)的參數(shù)是id還是email還是其他的參數(shù),我們都要對(duì)參數(shù)的類(lèi)型、大小、格式等等做這樣或者那樣的校驗(yàn),然后才進(jìn)行邏輯處理,以確保邏輯處理時(shí)萬(wàn)無(wú)一失,不會(huì)出現(xiàn)異樣。于是乎,在controller層中就會(huì)出現(xiàn)一大坨的校驗(yàn)代碼,這些校驗(yàn)代碼甚至有時(shí)候都超過(guò)了正常的邏輯代碼的數(shù)量,對(duì)于程序的擴(kuò)展和維護(hù)很不利的。
但是,laravel為我們提供了一個(gè)很好的服務(wù)去解決參數(shù)校驗(yàn)這個(gè)問(wèn)題,它就是----Validate。
首先,我們需要建一個(gè)路由,暫時(shí)就叫"test"吧,然后test對(duì)應(yīng)著TestController中的test方法。
Route::get('test', 'TestController@test'); class TestController extends Controller { public function test(Request $request) { } }
假設(shè)請(qǐng)求的參數(shù)中需要id、title這兩個(gè)參數(shù),并且id必須是數(shù)字,且長(zhǎng)度是1到10,并且是DB中的一行數(shù)據(jù)的主鍵、title必須是字符串,id和title都不能為空。一般的框架在寫(xiě)的時(shí)候就會(huì)先取到id和title,然后對(duì)取到的id和title進(jìn)行“是否是空”、“是否長(zhǎng)度在1到10之間”、“通過(guò)id能否在數(shù)據(jù)庫(kù)中找到數(shù)據(jù)”等等繁瑣的校驗(yàn),利用laravel的“Validate”你只需要這樣就可以了。
public function test(Request $request) { $validate = Validator::make($request->all(), [ 'id' => 'required|integer|between:1,10', 'title' => 'required|string' ]);
如果沒(méi)有錯(cuò)誤,就會(huì)繼續(xù)往下進(jìn)行邏輯處理。假如說(shuō)校驗(yàn)不通過(guò),例如id不在1和10之間,可以通過(guò)“validate”實(shí)例中的“errors()”方法,得到所有的錯(cuò)誤,然后將錯(cuò)誤放回給客戶端,如果想返回錯(cuò)誤隊(duì)列中的頭一個(gè)錯(cuò)誤,就寫(xiě)$validate->errors()->first(),如果想返回所有錯(cuò)誤列表,就寫(xiě)“$validate->errors()->all()”。如下:
if($validate->fails()) { return $validate->errors()->first(); }
或者返回
if($validate->fails()) { return $validate->errors()->all(); }
假如請(qǐng)求參數(shù)中的id不是一個(gè)數(shù)字,而是字符串,結(jié)果就會(huì)出現(xiàn):
你可能會(huì)想:返回結(jié)果能否使中文?答案當(dāng)然是可以,你可以針對(duì)自己的程序,換成你任何想要的語(yǔ)言:
在項(xiàng)目中找到“resources”目錄下的“l(fā)ang” 中的 “en”文件夾中的“validation.php”文件,
打開(kāi),然后找到這一行:
'integer' => 'The :attribute must be an integer.',
這句話除了“:attribute”是不是其他字和返回結(jié)果一模一樣?或許你已經(jīng)猜到了:這就是你調(diào)用的‘integer'方法的返回結(jié)果,“:attribute”是個(gè)變量,是你傳的“id”!現(xiàn)在,你可以寫(xiě)成任何語(yǔ)言,我把它改為中文:
'integer' => ':attribute 必須是數(shù)字!'
然后我們?cè)倏捶祷亟Y(jié)果:
完美!只要你利用Validator的make方法,在請(qǐng)求參數(shù)數(shù)組中對(duì)應(yīng)上‘integer'、“required”等字符串就可以利用laravel提供的服務(wù),對(duì)請(qǐng)求參數(shù)進(jìn)行“數(shù)字”、“判空”等校驗(yàn),laravel提供的眾多校驗(yàn)方法,可以在laravel官網(wǎng)查詢。(ps:或者直接查詢validation.php這個(gè)文件!)
你或許還會(huì)想:我現(xiàn)在校驗(yàn)了id是否為空,id是否是數(shù)字,我還想校驗(yàn)id對(duì)應(yīng)的數(shù)據(jù)能否在數(shù)據(jù)庫(kù)中查得到!這能實(shí)現(xiàn)嗎?
答案是:完全可以!在上篇文章中我介紹了laravel核心是一個(gè)IOC容器,你可以很方便的擴(kuò)展任何服務(wù)注入到容器中!自定義validate服務(wù)也不例外!
我們首先創(chuàng)建一個(gè)provider
php artisan make:provider TestProvider
然后在boot方法里寫(xiě)下:
public function boot() { Validator::extend('user', function($attribute, $value, $parameters) { return !is_null(User::find($value)); }); }
這行代碼很好理解吧:1、調(diào)用“Validator”的“extend”方法。2、傳給他倆個(gè)參數(shù),一個(gè)是“user”,一個(gè)是返回值為boolen類(lèi)型的callback 函數(shù)。3、函數(shù)中判斷User表中是否含有$value值數(shù)據(jù),如果有,返回true,如果沒(méi)有,返回false。
然后在“config”的“app.php”中注冊(cè)上這個(gè)provider。(如果不清楚,可以去看前一篇文章“三分鐘學(xué)會(huì)laravel服務(wù)擴(kuò)展”)
然后在validation.php中寫(xiě)上:
'user' => '此用戶不存在!',
然后在校驗(yàn)方法中添上“user”
$validate = Validator::make($request->all(), [ 'id' => 'required|integer|between:1,10|user', 'title' => 'required|string' ]);
數(shù)據(jù)庫(kù)中插入數(shù)據(jù),開(kāi)始檢驗(yàn):
OK,大功告成!是不是很簡(jiǎn)單?laravel框架是不是很強(qiáng)大?
以上這篇laravel請(qǐng)求參數(shù)校驗(yàn)方法就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
- Laravel 5.5中為響應(yīng)請(qǐng)求提供的可響應(yīng)接口詳解
- 讓Laravel API永遠(yuǎn)返回JSON格式響應(yīng)的方法示例
- Laravel+Dingo/Api 自定義響應(yīng)的實(shí)現(xiàn)
- laravel http 自定義公共驗(yàn)證和響應(yīng)的方法
- Laravel5.1 框架Request請(qǐng)求操作常見(jiàn)用法實(shí)例分析
- 跟我學(xué)Laravel之請(qǐng)求與輸入
- 跟我學(xué)Laravel之請(qǐng)求(Request)的生命周期
- 解決laravel 出現(xiàn)ajax請(qǐng)求419(unknown status)的問(wèn)題
- Laravel獲取當(dāng)前請(qǐng)求的控制器和方法以及中間件的例子
- Laravel框架處理用戶的請(qǐng)求操作詳解
- Laravel5.1 框架響應(yīng)基本用法實(shí)例分析
相關(guān)文章
調(diào)試WordPress中定時(shí)任務(wù)的相關(guān)PHP腳本示例
這篇文章主要介紹了調(diào)試WordPress中定時(shí)任務(wù)的相關(guān)PHP腳本示例,針對(duì)使用Cron API及wp_schedule_event()函數(shù)來(lái)寫(xiě)的定時(shí)任務(wù),需要的朋友可以參考下2015-12-12用 Composer構(gòu)建自己的 PHP 框架之基礎(chǔ)準(zhǔn)備
這篇文章主要介紹了用 Composer構(gòu)建自己的 PHP 框架的基礎(chǔ)準(zhǔn)備工作,其實(shí)就是各種基礎(chǔ)知識(shí),想自己搭建php框架的童鞋可要看仔細(xì)了2014-10-10php類(lèi)中的$this,static,final,const,self這幾個(gè)關(guān)鍵字使用方法
php類(lèi)中的$this,static,final,const,self這幾個(gè)關(guān)鍵字在項(xiàng)目中經(jīng)常會(huì)用的到,通過(guò)本文給大家分享this,static,final,const,self這幾個(gè)關(guān)鍵字使用方法,對(duì)此感興趣的朋友一起學(xué)習(xí)吧2015-12-12微信支付開(kāi)發(fā)動(dòng)態(tài)鏈接Native支付
本篇文章主要介紹微信支付下的基于動(dòng)態(tài)鏈接二維碼的Native支付實(shí)現(xiàn)流程,希望能給開(kāi)發(fā)微信支付的小伙伴提供幫助2016-07-07CI框架學(xué)習(xí)筆記(一) - 環(huán)境安裝、基本術(shù)語(yǔ)和框架流程
本文是CI框架學(xué)習(xí)筆記的第一篇,主要介紹了CI框架的環(huán)境安裝,基本術(shù)語(yǔ)以及框架流程,非常的詳細(xì),有需要的朋友可以參考下2014-10-10PHP創(chuàng)建PowerPoint2007文檔的方法
這篇文章主要介紹了PHP創(chuàng)建PowerPoint2007文檔的方法,通過(guò)PHP第三方插件PHPPowerPoint類(lèi)庫(kù)實(shí)現(xiàn)ppt文件的生成功能,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-12-12