国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
Request表單驗(yàn)證
實(shí)現(xiàn)驗(yàn)證
反饋錯(cuò)誤
多個(gè)驗(yàn)證規(guī)則
其他常用驗(yàn)證規(guī)則
使用Validation
總結(jié)
首頁(yè) 后端開發(fā) php教程 Laravel 5系列教程七:表單驗(yàn)證 Validation

Laravel 5系列教程七:表單驗(yàn)證 Validation

Jun 20, 2016 pm 12:49 PM

原文來自:https://laravist.com/article/15

Laravist是我剛剛上線的Laravel社區(qū),有任何與Laravel相關(guān)的問題可以到這里來問我,我會(huì)盡力去幫大家解決問題,后期會(huì)嘗試錄制一些視頻教程,形式大概是這樣的

https://laravist.com/lesson/1

終于要更新這個(gè)Laravel系列教程的第七篇了,期間去寫了一點(diǎn)其他的東西。

就不說廢話了吧,直接進(jìn)入Form Validation的部分吧。幾乎在每一個(gè)web應(yīng)用當(dāng)中都會(huì)有表單,而有表單基本就離不開表單驗(yàn)證。在laravel中,其實(shí)可以說是有兩種方式來進(jìn)行表單驗(yàn)證:使用Request和使用Validation。下面將分開講這兩部分的內(nèi)容,而且我會(huì)更著重第一種,也更推薦大家使用第一種進(jìn)行表單驗(yàn)證:

Request表單驗(yàn)證

為什么說是會(huì)把精力都放在講解第一種驗(yàn)證方式呢?因?yàn)閭€(gè)人覺得第一種方式在相同的驗(yàn)證條件下,更加易于維護(hù)和可以進(jìn)行代碼重用。而且寫代碼的形式更適用于Laravel和我個(gè)人的使用習(xí)慣:可以使用命令行來生成代碼。也就是可以使用artisan這個(gè)工具:

php artisan make:request StoreArticleRequest

在項(xiàng)目目錄下使用artisan的make:request命令就可以生成一個(gè)用于表單驗(yàn)證Request類了,這個(gè)類我們?cè)谶@里命名為StoreArticleRequest,你也可以以你自己喜歡的方式來命名,但我還是推薦大家在命名的時(shí)候盡量使得名字比較人性化一點(diǎn),這樣會(huì)比較對(duì)于后期再看代碼的時(shí)候有很多好處。這個(gè)命令生成的文件位于app/Http/Requests/這個(gè)文件夾當(dāng)中,我們打開這個(gè)文件來看:

class StoreArticleRequest extends Request{    /**     * Determine if the user is authorized to make this request.     *     * @return bool     */    public function authorize()    {        return false;    }    /**     * Get the validation rules that apply to the request.     *     * @return array     */    public function rules()    {        return [            //        ];    }}

實(shí)現(xiàn)驗(yàn)證

可以看到里面會(huì)有兩個(gè)方法:authorize()和 rules() 。authorize()可以這樣簡(jiǎn)單地理解:我們?cè)谔幚磉@個(gè)表單請(qǐng)求(通常是一個(gè)post請(qǐng)求)的時(shí)候是否是需要進(jìn)行身份驗(yàn)證,這種驗(yàn)證是指:比如A發(fā)表的評(píng)論,B能不能進(jìn)行編輯。如果不能,則保留返回false,如果可以,則修改返回true。那么我們這里的邏輯是:既然是發(fā)表文章,在我們這個(gè)站點(diǎn)注冊(cè)的用戶(如果開放注冊(cè)的話)都是可以發(fā)表文章的,所以我們首先修改authorize()方法,將其返回值改為:return true;。

然后對(duì)于rules()方法,我們需要在這里設(shè)置我們的驗(yàn)證規(guī)則,比如我們可以設(shè)置下面這個(gè)的驗(yàn)證規(guī)則:

public function rules()    {        return [            'title' => 'required',            'content' => 'required'        ];    }

因?yàn)槲覀冊(cè)趧?chuàng)建文章的時(shí)候,我們會(huì)有兩個(gè)提交過來的字段:title和content。這是我們?cè)谠O(shè)計(jì)articles表的時(shí)候設(shè)置的兩個(gè)字段。

然后,上面的驗(yàn)證規(guī)則是:對(duì)于title和content兩個(gè)字段,我們需要用戶為其填充內(nèi)容,不能為空。

既然這里的規(guī)則設(shè)置好之后,我們?cè)撛趺磻?yīng)用起來呢?也就是我們?cè)趺丛趯⑽恼麓嫒霐?shù)據(jù)庫(kù)之前進(jìn)行驗(yàn)證呢?很簡(jiǎn)單,我們只需要稍微修改ArticleController的store()方法:

public function store(Requests\StoreArticleRequest $request)    {        $input = $request->all();        //下面增加兩行,順便看看Request::get的使用        $input['intro'] = mb_substr($request->get('content'),0,64);     }   

我們將整個(gè)StoreArticleRequest類的實(shí)例以$request變量傳入store()方法,這個(gè)時(shí)候,laravel
就會(huì)自動(dòng)檢查我們是否需要進(jìn)行表單驗(yàn)證(rules方法有沒有定義驗(yàn)證規(guī)則),如果有需要驗(yàn)證的話,laravel會(huì)首先走驗(yàn)證這條路,如果驗(yàn)證沒有通過,store()方法內(nèi)的代碼不會(huì)被執(zhí)行,而是直接跳轉(zhuǎn)到提交表單的頁(yè)面,這里是:http://blog.dev/article/create 這個(gè)頁(yè)面。如果所有的驗(yàn)證都通過之后,才會(huì)執(zhí)行store()內(nèi)部的代碼,也就是才會(huì)執(zhí)行到$input = $request->all();這里以及往下的代碼。。。比如我們來試試留空的時(shí)候是什么樣的情況:

反饋錯(cuò)誤

上面的圖片中好像沒有什么變化,但其實(shí)是已經(jīng)提交了一次了,但是又馬上跳轉(zhuǎn)回來了。我們可以使用下面的方式來驗(yàn)證一下:

@if($errors->any())        <ul class="alert alert-danger">            @foreach($errors->all() as $error)                <li>{{ $error }}</li>            @endforeach        </ul>@endif

在create.blade.php這個(gè)視圖文件中增加上面的代碼,我這里是放在{!! Form::close() !!}后面。這里的意思大概就是,如果有任何表單驗(yàn)證的錯(cuò)誤消息,我們就講這個(gè)信息打印出來反饋給用戶。如果沒有,則不會(huì)顯示信息。我們?cè)賮碓囈幌拢?/p>

這時(shí)候可以看到,我們?cè)诒韱悟?yàn)證沒有通過的時(shí)候,在頁(yè)面顯示了相對(duì)應(yīng)的錯(cuò)誤信息。如果沒有錯(cuò)誤,就創(chuàng)建一篇文章。

tips:如果你不想錯(cuò)誤信息為英文,可以到resources/lang/en/validation.php修改,或者你直接創(chuàng)建一個(gè)新的語(yǔ)言文件包。

多個(gè)驗(yàn)證規(guī)則

OK,這里,我們基本是將這個(gè)這個(gè)驗(yàn)證流程走通了。但是,在實(shí)際的開發(fā)中,我們的驗(yàn)證并不都是這個(gè)簡(jiǎn)單:要是我們要對(duì)一個(gè)字段設(shè)置多個(gè)驗(yàn)證規(guī)則呢?比如我們希望文章的title最少不能少于三個(gè)字節(jié)長(zhǎng)度呢?我們可以這樣,在rules()方法中:

'title' => 'required|min:3',

在laravel中,我們使用|將多個(gè)規(guī)則分開,:表示規(guī)則的值。其實(shí)這里你也可以使用數(shù)組的,但是我還是推薦大家像上面這樣寫,簡(jiǎn)潔明了。

其他常用驗(yàn)證規(guī)則

至于更多地驗(yàn)證規(guī)則,比如注冊(cè)的時(shí)候,驗(yàn)證一個(gè)email和確認(rèn)密碼的時(shí)候,我們?cè)趺葱枰趺磳懙哪兀?/p>

'email'=>'required|email','password'=>'required|min:6|confirmed','password_confirmation' => 'required|min:6'

上面我直接給出這兩個(gè)常用場(chǎng)景的最常見的寫法,email就代表驗(yàn)證所填的信息是否是一個(gè)正確地郵箱格式了,至于確認(rèn)密碼就使用confirmed來指定,這里注意是confirmed而不是confirme。而且第二次輸入密碼的字段需要寫成password_confirmation這個(gè)形式,也就是在視圖中,我們會(huì)有類似這樣的input表單:

<input type="password" name="password" /><input type="password" name="password_confirmation" />

關(guān)于更多驗(yàn)證規(guī)則,參考官方文檔:

http://laravel.com/docs/5.1/validation

使用Validation

使用這個(gè)之前可以將store(Requests\StoreArticleRequest $request)中的變量去掉

使用Validation的時(shí)候,多用于驗(yàn)證一些簡(jiǎn)單的表單驗(yàn)證。這里演示直接寫于ArticleController當(dāng)中,直接使用Validator::make(),使用方式為Validator::make(array $request,array $rules),比如說我們的例子可以在store()中寫成:

$input = Request::all();$validator = Validator::make($input, [    'title' => 'required|min:3',    'body' => 'required',]);   

然后可以使用下面這樣的方式來檢查驗(yàn)證有沒有通過:

 if ($validator->fails())  {            }

驗(yàn)證通過之后,我們才進(jìn)行下一步操作,比如將數(shù)據(jù)存入數(shù)據(jù)庫(kù)。一個(gè)基本的Validation流程就完成了,而且關(guān)于Validation的部分,我也只想介紹到這里,因?yàn)槲視?huì)安利大家使用第一種方式:Request。

tips:這兩種方式的背后都是使用一樣的驗(yàn)證機(jī)制。

總結(jié)

這里就基本將基礎(chǔ)的表單驗(yàn)證說完了,下一節(jié)我準(zhǔn)說說queryScope和SetAttributes的使用,這兩個(gè)對(duì)于我們的數(shù)據(jù)入庫(kù)的預(yù)處理和代碼重用都很有幫助,所以下次會(huì)先說這兩個(gè)知識(shí)點(diǎn):我們會(huì)先對(duì)published_at這個(gè)字段的設(shè)置和使用發(fā)揮出來,到時(shí)候你就知道設(shè)置這個(gè)字段的好處了。

最后:Happy Hacking

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請(qǐng)聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動(dòng)的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁(yè)開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級(jí)代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1601
29
PHP教程
1502
276
PHP變量范圍解釋了 PHP變量范圍解釋了 Jul 17, 2025 am 04:16 AM

PHP變量作用域常見問題及解決方法包括:1.函數(shù)內(nèi)部無法訪問全局變量,需使用global關(guān)鍵字或參數(shù)傳入;2.靜態(tài)變量用static聲明,只初始化一次并在多次調(diào)用間保持值;3.超全局變量如$_GET、$_POST可在任何作用域直接使用,但需注意安全過濾;4.匿名函數(shù)需通過use關(guān)鍵字引入父作用域變量,修改外部變量則需傳遞引用。掌握這些規(guī)則有助于避免錯(cuò)誤并提升代碼穩(wěn)定性。

如何在PHP中牢固地處理文件上傳? 如何在PHP中牢固地處理文件上傳? Jul 08, 2025 am 02:37 AM

要安全處理PHP文件上傳需驗(yàn)證來源與類型、控制文件名與路徑、設(shè)置服務(wù)器限制并二次處理媒體文件。1.驗(yàn)證上傳來源通過token防止CSRF并通過finfo_file檢測(cè)真實(shí)MIME類型使用白名單控制;2.重命名文件為隨機(jī)字符串并根據(jù)檢測(cè)類型決定擴(kuò)展名存儲(chǔ)至非Web目錄;3.PHP配置限制上傳大小及臨時(shí)目錄Nginx/Apache禁止訪問上傳目錄;4.GD庫(kù)重新保存圖片清除潛在惡意數(shù)據(jù)。

在PHP中評(píng)論代碼 在PHP中評(píng)論代碼 Jul 18, 2025 am 04:57 AM

PHP注釋代碼常用方法有三種:1.單行注釋用//或#屏蔽一行代碼,推薦使用//;2.多行注釋用/.../包裹代碼塊,不可嵌套但可跨行;3.組合技巧注釋如用/if(){}/控制邏輯塊,或配合編輯器快捷鍵提升效率,使用時(shí)需注意閉合符號(hào)和避免嵌套。

發(fā)電機(jī)如何在PHP中工作? 發(fā)電機(jī)如何在PHP中工作? Jul 11, 2025 am 03:12 AM

AgeneratorinPHPisamemory-efficientwaytoiterateoverlargedatasetsbyyieldingvaluesoneatatimeinsteadofreturningthemallatonce.1.Generatorsusetheyieldkeywordtoproducevaluesondemand,reducingmemoryusage.2.Theyareusefulforhandlingbigloops,readinglargefiles,or

撰寫PHP評(píng)論的提示 撰寫PHP評(píng)論的提示 Jul 18, 2025 am 04:51 AM

寫好PHP注釋的關(guān)鍵在于明確目的與規(guī)范,注釋應(yīng)解釋“為什么”而非“做了什么”,避免冗余或過于簡(jiǎn)單。1.使用統(tǒng)一格式,如docblock(/*/)用于類、方法說明,提升可讀性與工具兼容性;2.強(qiáng)調(diào)邏輯背后的原因,如說明為何需手動(dòng)輸出JS跳轉(zhuǎn);3.在復(fù)雜代碼前添加總覽性說明,分步驟描述流程,幫助理解整體思路;4.合理使用TODO和FIXME標(biāo)記待辦事項(xiàng)與問題,便于后續(xù)追蹤與協(xié)作。好的注釋能降低溝通成本,提升代碼維護(hù)效率。

學(xué)習(xí)PHP:初學(xué)者指南 學(xué)習(xí)PHP:初學(xué)者指南 Jul 18, 2025 am 04:54 AM

易于效率,啟動(dòng)啟動(dòng)tingupalocalserverenverenvirestoolslikexamppandacodeeditorlikevscode.1)installxamppforapache,mysql,andphp.2)uscodeeditorforsyntaxssupport.3)

如何通過php中的索引訪問字符串中的字符 如何通過php中的索引訪問字符串中的字符 Jul 12, 2025 am 03:15 AM

在PHP中獲取字符串特定索引字符可用方括號(hào)或花括號(hào),但推薦方括號(hào);索引從0開始,超出范圍訪問返回空值,不可賦值;處理多字節(jié)字符需用mb_substr。例如:$str="hello";echo$str[0];輸出h;而中文等字符需用mb_substr($str,1,1)獲取正確結(jié)果;實(shí)際應(yīng)用中循環(huán)訪問前應(yīng)檢查字符串長(zhǎng)度,動(dòng)態(tài)字符串需驗(yàn)證有效性,多語(yǔ)言項(xiàng)目建議統(tǒng)一使用多字節(jié)安全函數(shù)。

快速PHP安裝教程 快速PHP安裝教程 Jul 18, 2025 am 04:52 AM

ToinstallPHPquickly,useXAMPPonWindowsorHomebrewonmacOS.1.OnWindows,downloadandinstallXAMPP,selectcomponents,startApache,andplacefilesinhtdocs.2.Alternatively,manuallyinstallPHPfromphp.netandsetupaserverlikeApache.3.OnmacOS,installHomebrew,thenrun'bre

See all articles