国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

jindong / 638人閱讀

摘要:幾乎在每一個(gè)應(yīng)用當(dāng)中都會(huì)有表單,而有表單基本就離不開(kāi)表單驗(yàn)證。在中,其實(shí)可以說(shuō)是有兩種方式來(lái)進(jìn)行表單驗(yàn)證使用和使用。然后,上面的驗(yàn)證規(guī)則是對(duì)于和兩個(gè)字段,我們需要用戶為其填充內(nèi)容,不能為空。

原文來(lái)自:https://laravist.com/article/15

免費(fèi)視頻教程地址 https://laravist.com/series/laravel-5-basic

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

https://laravist.com/lesson/1

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

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

Request表單驗(yàn)證

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

php artisan make:request StoreArticleRequest

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

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è)的用戶(如果開(kāi)放注冊(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è)提交過(guò)來(lái)的字段:titlecontent。這是我們?cè)谠O(shè)計(jì)articles表的時(shí)候設(shè)置的兩個(gè)字段。

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

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

public function store(RequestsStoreArticleRequest $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方法有沒(méi)有定義驗(yàn)證規(guī)則),如果有需要驗(yàn)證的話,laravel會(huì)首先走驗(yàn)證這條路,如果驗(yàn)證沒(méi)有通過(guò),store()方法內(nèi)的代碼不會(huì)被執(zhí)行,而是直接跳轉(zhuǎn)到提交表單的頁(yè)面,這里是:http://blog.dev/article/create 這個(gè)頁(yè)面。如果所有的驗(yàn)證都通過(guò)之后,才會(huì)執(zhí)行store()內(nèi)部的代碼,也就是才會(huì)執(zhí)行到$input = $request->all();這里以及往下的代碼。。。比如我們來(lái)試試留空的時(shí)候是什么樣的情況:

反饋錯(cuò)誤

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

@if($errors->any())
        
    @foreach($errors->all() as $error)
  • {{ $error }}
  • @endforeach
@endif

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

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

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

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

OK,這里,我們基本是將這個(gè)這個(gè)驗(yàn)證流程走通了。但是,在實(shí)際的開(kāi)發(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ī)則分開(kāi),:表示規(guī)則的值。其實(shí)這里你也可以使用數(shù)組的,但是我還是推薦大家像上面這樣寫(xiě),簡(jiǎn)潔明了。

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

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

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

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



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

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

使用Validation

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

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

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

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

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

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

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

總結(jié)

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

最后:Happy Hacking

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/21103.html

相關(guān)文章

  • Laravel 5系列教程六:表單 Forms

    摘要:不難發(fā)現(xiàn),的還默認(rèn)為我們生成一個(gè)的表單,這個(gè)是默認(rèn)對(duì)表單提交的一點(diǎn)安全支持。在表單提交的時(shí)候,會(huì)自動(dòng)檢查這個(gè)是否與保存在中的一致,如果不一致,那就直接跳轉(zhuǎn)回遠(yuǎn)頁(yè)面,不允許我們提交數(shù)據(jù)。 原文來(lái)自:https://jellybool.com/post/programming-with-laravel-5-laravel-forms-input 免費(fèi)視頻教程地址 https://larav...

    fancyLuo 評(píng)論0 收藏0
  • Laravel思維導(dǎo)圖之HTTP請(qǐng)求、響應(yīng)、表單驗(yàn)證

    摘要:今天我來(lái)分享中層關(guān)于請(qǐng)求響應(yīng)與表單驗(yàn)證的知識(shí)。手動(dòng)創(chuàng)建驗(yàn)證請(qǐng)求之前的內(nèi)容是直接使用的方法來(lái)實(shí)現(xiàn)表單驗(yàn)證。下一步到這篇為止,我完成了入門(mén)指南核心概念層的路由中間件控制器請(qǐng)求響應(yīng)表單驗(yàn)證的學(xué)習(xí)和整理。 showImg(https://segmentfault.com/img/remote/1460000010882838); 今天我來(lái)分享 Laravel 中 HTTP 層關(guān)于請(qǐng)求、響應(yīng)與表...

    lewif 評(píng)論0 收藏0
  • Laravel 異常處理

    摘要:在通常情況下,會(huì)自動(dòng)將異常信息分為兩種格式來(lái)處理或者。而在這之前,它會(huì)把基本所有的異常信息先處理為后面講一下常見(jiàn)的異常處理。認(rèn)證異常處理認(rèn)證異常是指,這個(gè)是由的方法來(lái)處理的。 學(xué) Laravel 和 Vuejs,來(lái) codecasts.com 看高質(zhì)量視頻教程 之前的一篇文章介紹了 Laravel 的異常和日志的一些情況,本文來(lái)看看 Laravel 在處理異常返回的時(shí)候是什么樣的流程。...

    shadajin 評(píng)論0 收藏0
  • 前端技術(shù) 博客文章、書(shū)籍 積累

    摘要:好多編輯器例如等都支持這樣的語(yǔ)法來(lái)快速的編寫(xiě)代碼如何優(yōu)雅地使用把標(biāo)簽放在結(jié)束標(biāo)簽之后結(jié)束標(biāo)簽之前的差別什么是響應(yīng)式設(shè)計(jì)怎樣進(jìn)行 書(shū)籍 《JavaScriptDOM編程藝術(shù)》《JavaScript高級(jí)程序設(shè)計(jì)》《JavaScript框架設(shè)計(jì)》《JavaScript專家編程》《JavaScript Ninjia》《JavaScript語(yǔ)言精粹(修訂版)》《JavaScript設(shè)計(jì)模式》《J...

    LiangJ 評(píng)論0 收藏0
  • 前端技術(shù) 博客文章、書(shū)籍 積累

    摘要:好多編輯器例如等都支持這樣的語(yǔ)法來(lái)快速的編寫(xiě)代碼如何優(yōu)雅地使用把標(biāo)簽放在結(jié)束標(biāo)簽之后結(jié)束標(biāo)簽之前的差別什么是響應(yīng)式設(shè)計(jì)怎樣進(jìn)行 書(shū)籍 《JavaScriptDOM編程藝術(shù)》《JavaScript高級(jí)程序設(shè)計(jì)》《JavaScript框架設(shè)計(jì)》《JavaScript專家編程》《JavaScript Ninjia》《JavaScript語(yǔ)言精粹(修訂版)》《JavaScript設(shè)計(jì)模式》《J...

    codercao 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<