摘要:幾乎在每一個應用當中都會有表單,而有表單基本就離不開表單驗證。在中,其實可以說是有兩種方式來進行表單驗證使用和使用。然后,上面的驗證規(guī)則是對于和兩個字段,我們需要用戶為其填充內(nèi)容,不能為空。
免費視頻教程地址 https://laravist.com/series/laravel-5-basic原文來自:https://laravist.com/article/15
Laravist是我剛剛上線的Laravel社區(qū),有任何與Laravel相關的問題可以到這里來問我,我會盡力去幫大家解決問題,后期會嘗試錄制一些視頻教程,形式大概是這樣的
https://laravist.com/lesson/1
終于要更新這個Laravel系列教程的第七篇了,期間去寫了一點其他的東西。
就不說廢話了吧,直接進入Form Validation的部分吧。幾乎在每一個web應用當中都會有表單,而有表單基本就離不開表單驗證。在laravel中,其實可以說是有兩種方式來進行表單驗證:使用Request和使用Validation。下面將分開講這兩部分的內(nèi)容,而且我會更著重第一種,也更推薦大家使用第一種進行表單驗證:
Request表單驗證為什么說是會把精力都放在講解第一種驗證方式呢?因為個人覺得第一種方式在相同的驗證條件下,更加易于維護和可以進行代碼重用。而且寫代碼的形式更適用于Laravel和我個人的使用習慣:可以使用命令行來生成代碼。也就是可以使用artisan這個工具:
php artisan make:request StoreArticleRequest
在項目目錄下使用artisan的make:request命令就可以生成一個用于表單驗證Request類了,這個類我們在這里命名為StoreArticleRequest,你也可以以你自己喜歡的方式來命名,但我還是推薦大家在命名的時候盡量使得名字比較人性化一點,這樣會比較對于后期再看代碼的時候有很多好處。這個命令生成的文件位于app/Http/Requests/這個文件夾當中,我們打開這個文件來看:
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 [ // ]; } }實現(xiàn)驗證
可以看到里面會有兩個方法:authorize()和 rules() 。authorize()可以這樣簡單地理解:我們在處理這個表單請求(通常是一個post請求)的時候是否是需要進行身份驗證,這種驗證是指:比如A發(fā)表的評論,B能不能進行編輯。如果不能,則保留返回false,如果可以,則修改返回true。那么我們這里的邏輯是:既然是發(fā)表文章,在我們這個站點注冊的用戶(如果開放注冊的話)都是可以發(fā)表文章的,所以我們首先修改authorize()方法,將其返回值改為:return true;。
然后對于rules()方法,我們需要在這里設置我們的驗證規(guī)則,比如我們可以設置下面這個的驗證規(guī)則:
public function rules() { return [ "title" => "required", "content" => "required" ]; }
因為我們在創(chuàng)建文章的時候,我們會有兩個提交過來的字段:title和content。這是我們在設計articles表的時候設置的兩個字段。
然后,上面的驗證規(guī)則是:對于title和content兩個字段,我們需要用戶為其填充內(nèi)容,不能為空。
既然這里的規(guī)則設置好之后,我們該怎么應用起來呢?也就是我們怎么在將文章存入數(shù)據(jù)庫之前進行驗證呢?很簡單,我們只需要稍微修改ArticleController的store()方法:
public function store(RequestsStoreArticleRequest $request) { $input = $request->all(); //下面增加兩行,順便看看Request::get的使用 $input["intro"] = mb_substr($request->get("content"),0,64); }
我們將整個StoreArticleRequest類的實例以$request變量傳入store()方法,這個時候,laravel
就會自動檢查我們是否需要進行表單驗證(rules方法有沒有定義驗證規(guī)則),如果有需要驗證的話,laravel會首先走驗證這條路,如果驗證沒有通過,store()方法內(nèi)的代碼不會被執(zhí)行,而是直接跳轉到提交表單的頁面,這里是:http://blog.dev/article/create 這個頁面。如果所有的驗證都通過之后,才會執(zhí)行store()內(nèi)部的代碼,也就是才會執(zhí)行到$input = $request->all();這里以及往下的代碼。。。比如我們來試試留空的時候是什么樣的情況:
上面的圖片中好像沒有什么變化,但其實是已經(jīng)提交了一次了,但是又馬上跳轉回來了。我們可以使用下面的方式來驗證一下:
@if($errors->any())
在create.blade.php這個視圖文件中增加上面的代碼,我這里是放在{!! Form::close() !!}后面。這里的意思大概就是,如果有任何表單驗證的錯誤消息,我們就講這個信息打印出來反饋給用戶。如果沒有,則不會顯示信息。我們再來試一下:
這時候可以看到,我們在表單驗證沒有通過的時候,在頁面顯示了相對應的錯誤信息。如果沒有錯誤,就創(chuàng)建一篇文章。
tips:如果你不想錯誤信息為英文,可以到resources/lang/en/validation.php修改,或者你直接創(chuàng)建一個新的語言文件包。
多個驗證規(guī)則OK,這里,我們基本是將這個這個驗證流程走通了。但是,在實際的開發(fā)中,我們的驗證并不都是這個簡單:要是我們要對一個字段設置多個驗證規(guī)則呢?比如我們希望文章的title最少不能少于三個字節(jié)長度呢?我們可以這樣,在rules()方法中:
"title" => "required|min:3",
在laravel中,我們使用|將多個規(guī)則分開,:表示規(guī)則的值。其實這里你也可以使用數(shù)組的,但是我還是推薦大家像上面這樣寫,簡潔明了。
其他常用驗證規(guī)則至于更多地驗證規(guī)則,比如注冊的時候,驗證一個email和確認密碼的時候,我們怎么需要怎么寫的呢?
"email"=>"required|email", "password"=>"required|min:6|confirmed", "password_confirmation" => "required|min:6"
上面我直接給出這兩個常用場景的最常見的寫法,email就代表驗證所填的信息是否是一個正確地郵箱格式了,至于確認密碼就使用confirmed來指定,這里注意是confirmed而不是confirme。而且第二次輸入密碼的字段需要寫成password_confirmation這個形式,也就是在視圖中,我們會有類似這樣的input表單:
關于更多驗證規(guī)則,參考官方文檔:
http://laravel.com/docs/5.1/validation
使用Validation使用這個之前可以將store(RequestsStoreArticleRequest $request)中的變量去掉
使用Validation的時候,多用于驗證一些簡單的表單驗證。這里演示直接寫于ArticleController當中,直接使用Validator::make(),使用方式為Validator::make(array $request,array $rules),比如說我們的例子可以在store()中寫成:
$input = Request::all(); $validator = Validator::make($input, [ "title" => "required|min:3", "body" => "required", ]);
然后可以使用下面這樣的方式來檢查驗證有沒有通過:
if ($validator->fails()) { }
驗證通過之后,我們才進行下一步操作,比如將數(shù)據(jù)存入數(shù)據(jù)庫。一個基本的Validation流程就完成了,而且關于Validation的部分,我也只想介紹到這里,因為我會安利大家使用第一種方式:Request。
tips:這兩種方式的背后都是使用一樣的驗證機制。
總結這里就基本將基礎的表單驗證說完了,下一節(jié)我準說說queryScope和SetAttributes的使用,這兩個對于我們的數(shù)據(jù)入庫的預處理和代碼重用都很有幫助,所以下次會先說這兩個知識點:我們會先對published_at這個字段的設置和使用發(fā)揮出來,到時候你就知道設置這個字段的好處了。
最后:Happy Hacking
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21103.html
摘要:不難發(fā)現(xiàn),的還默認為我們生成一個的表單,這個是默認對表單提交的一點安全支持。在表單提交的時候,會自動檢查這個是否與保存在中的一致,如果不一致,那就直接跳轉回遠頁面,不允許我們提交數(shù)據(jù)。 原文來自:https://jellybool.com/post/programming-with-laravel-5-laravel-forms-input 免費視頻教程地址 https://larav...
摘要:今天我來分享中層關于請求響應與表單驗證的知識。手動創(chuàng)建驗證請求之前的內(nèi)容是直接使用的方法來實現(xiàn)表單驗證。下一步到這篇為止,我完成了入門指南核心概念層的路由中間件控制器請求響應表單驗證的學習和整理。 showImg(https://segmentfault.com/img/remote/1460000010882838); 今天我來分享 Laravel 中 HTTP 層關于請求、響應與表...
摘要:在通常情況下,會自動將異常信息分為兩種格式來處理或者。而在這之前,它會把基本所有的異常信息先處理為后面講一下常見的異常處理。認證異常處理認證異常是指,這個是由的方法來處理的。 學 Laravel 和 Vuejs,來 codecasts.com 看高質(zhì)量視頻教程 之前的一篇文章介紹了 Laravel 的異常和日志的一些情況,本文來看看 Laravel 在處理異常返回的時候是什么樣的流程。...
摘要:好多編輯器例如等都支持這樣的語法來快速的編寫代碼如何優(yōu)雅地使用把標簽放在結束標簽之后結束標簽之前的差別什么是響應式設計怎樣進行 書籍 《JavaScriptDOM編程藝術》《JavaScript高級程序設計》《JavaScript框架設計》《JavaScript專家編程》《JavaScript Ninjia》《JavaScript語言精粹(修訂版)》《JavaScript設計模式》《J...
摘要:好多編輯器例如等都支持這樣的語法來快速的編寫代碼如何優(yōu)雅地使用把標簽放在結束標簽之后結束標簽之前的差別什么是響應式設計怎樣進行 書籍 《JavaScriptDOM編程藝術》《JavaScript高級程序設計》《JavaScript框架設計》《JavaScript專家編程》《JavaScript Ninjia》《JavaScript語言精粹(修訂版)》《JavaScript設計模式》《J...
閱讀 3150·2021-10-08 10:04
閱讀 1085·2021-09-30 09:48
閱讀 3454·2021-09-22 10:53
閱讀 1673·2021-09-10 11:22
閱讀 1689·2021-09-06 15:00
閱讀 2148·2019-08-30 15:56
閱讀 711·2019-08-30 15:53
閱讀 2283·2019-08-30 13:04