今天我來分享 Laravel 中 HTTP 層關於請求、響應與表單驗證的知識。前端
在控制器方法中使用 Illuminate\Http\Request
類型提示,
能夠以依賴注入方式來獲取當前 HTTP 請求的實例。laravel
將路由參數置於其餘依賴以後能夠傳入路由參數。數據庫
Request 提供了內置方法來便捷地作請求相關處理。json
path
方法返回請求路徑信息。小程序
is
方法驗證收到的請求路徑與指定規則是否匹配。數組
url
返回不帶有查詢字符串的 URL。瀏覽器
fullUrl
返回包含查詢字符串的完整 URL。微信
method
方法返回 HTTP 請求方式。cookie
isMethod
方法驗證 HTTP 請求方式與指定規則是否匹配。網絡
在 Laravel 的全局中間件中默認包含了 TrimStrings
和 ConvertEmptyStringsToNull
兩個中間件。這些中間件被列在 App\Http\Kernel
類中。它們會自動處理全部請求中傳入的字符串字段,好比將空的字符串字段轉變成 null 值。想停用這些功能,則須要在 App\Http\Kernel
類的 $middleware
屬性中移除這些中間件。
Laravel 支持從 Request 中獲取常規數據、舊輸入數據、cookies。
獲取常規數據的方法有:
使用 all
方法以 數組 形式獲取到全部輸入數據。
input 方法獲取指定輸入值。
經過動態屬性獲取輸入數據。
經過 json
方法獲取 JSON 輸入信息。
經過 only/except
方法獲取部分輸入數據。
經過 has
方法肯定是否有輸入值。
對於舊數據,Laravel 容許你將本次的輸入數據保留到下一次請求發送前。
這個特性在表單驗證錯誤後從新填寫表單至關有用。
獲取上傳文件的相關方法:
file
方法獲取上傳的文件。
hasFile
方法確認上傳的文件是否存在。
isValid
方法驗證上傳的文件是否有效。
UploadedFile
這個類也包含了訪問文件完整路徑和擴展的方法。
path
方法獲取路徑。
extension
方法獲取擴展名。
此外,store
方法支持上傳文件儲存到本地磁盤或者雲存儲上。
全部路由和控制器都會返回一個響應並返回給用戶的瀏覽器。
Laravel 支持的 HTTP 響應類型包括字符串、數組、對象、附件頭信息、附加 Cookie 等。
重定向響應是 Illuminate\Http\RedirectResponse
類的實例,
而且包含用戶須要重定向至另外一個 URL 所需的頭信息。
Laravel 支持:
經過全局 redirect
輔助函數實現重定向。
經過 back
輔助函數實現重定向至上級頁面。
重定向至命名路由,並根據須要攜帶普通或 Eloquent 模型參數。
經過 action
方法傳遞控制器和行爲名稱做爲參數來實現重定向至控制器行爲。
重定向至一個新的 URL 的同時一般會 附加 Session 閃存數據。
使用全局輔助函數 response
能夠輕鬆的生成其餘類型的響應實例。
自定義能夠在不少路由和控制器重複使用的響應,可使用 Response Facade 實現的 macro
方法。
Laravel 提供了多種不一樣的驗證方法來對應用程序傳入的數據進行驗證。默認狀況下,Laravel 的基類控制器使用 ValidatesRequests Trait,它提供了方便的方法使用各類強大的驗證規則來驗證傳入的 HTTP 請求數據。
重點在於在控制器的方法中,添加驗證邏輯。
這部分與上面實例的差異在於爲了知足更復雜的驗證情境,咱們須要建立一個表單請求。表單請求是一個自定義的請求類,裏面包含着驗證邏輯。想要運行驗證規則,在控制器方法中利用類型提示傳入請求。
在自定義的表單請求類中能夠實現:
經過 rules
方法添加驗證規則。
經過 withValidator
方法在表單請求之後添加鉤子。
經過 authorize
方法受權表單請求。
重寫 AppHttpRequestsRequest 中的 formatErrors
方法來自定義錯誤格式。
重寫 messages
方法自定義錯誤消息。
以前的內容是直接使用 ValidatesRequests Trait 的 validate
方法來實現表單驗證。此外,還能夠手動建立一個 validator
實例並經過 Validator::make
方法在 Facade 生成一個新的 validator
實例來實現表單驗證。
調用 Validator
實例的 errors
方法,會獲得一個 Illuminate\Support\MessageBag
的實例,能夠對 MessageBag
進行各類處理,以知足具體的需求。
經常使用的錯誤信息相關方法:
經過 first
方法查看特定字段的第一個錯誤消息。
經過 get
方法查看特定字段的全部錯誤消息。
經過 all
方法查看全部字段的全部錯誤消息。
經過 has
方法判斷特定字段是否含有錯誤消息。
自定義錯誤消息則主要經過傳遞三個參數到 Validator::make
方法來實現。
Laravel 內置了大量可用的驗證規則。以下圖:
具體用法能夠查看文檔:http://d.laravel-china.org/docs/5.4/validation#available-validation-rules
Laravel 還能夠實現靈活的根據條件添加規則,如當字段存在時才進行驗證,以及更多複雜的自定義驗證規則。
對於請求中的數組參數,可使用型號 * 字符獲取全部數組中的項。
除了 Laravel 內置的驗證規則外,還能夠根據須要自定義規則。在 服務提供者 中使用 Validator Facade 中的 extend 方法來註冊自定義的驗證規則。
到這篇爲止,我完成了 Laravel 入門指南、核心概念、HTTP 層的路由、中間件、控制器、請求、響應、表單驗證的學習和整理。這幾個部分已經可讓你實現簡單的面向前端的接口。
接下來我將對數據庫及 ORM 部分進行學習和整理。絕大多數應用的數據都存儲在數據庫中,服務端的功能圍繞着數據庫中存儲的數據展開,從而構建了強大的應用。
對於知識的學習,整理是很是關鍵的一環,有助於加深理解。
對於 Laravel 的學習我將持續地以思惟導圖的方式整理輸出,並首發在微信公衆號 up2048
上分享給須要的讀者。
因爲思惟導圖在導出成圖片的過程當中會變得模糊,爲了方便讀者,我也提供了思惟導圖源文件的下載。讀者可根據須要,關注微信公衆號:up2048,並回復「腦圖」來免費獲取。
- EOF -