摘要:今天我來分享中層關于請求響應與表單驗證的知識。手動創建驗證請求之前的內容是直接使用的方法來實現表單驗證。下一步到這篇為止,我完成了入門指南核心概念層的路由中間件控制器請求響應表單驗證的學習和整理。
今天我來分享 Laravel 中 HTTP 層關于請求、響應與表單驗證的知識。
0x00 HTTP 請求 獲取請求在控制器方法中使用 IlluminateHttpRequest 類型提示,
可以以依賴注入方式來獲取當前 HTTP 請求的實例。
將路由參數置于其他依賴之后可以傳入路由參數。
Request 提供了內置方法來便捷地做請求相關處理。
path 方法返回請求路徑信息。
is 方法驗證收到的請求路徑與指定規則是否匹配。
url 返回不帶有查詢字符串的 URL。
fullUrl 返回包含查詢字符串的完整 URL。
method 方法返回 HTTP 請求方式。
isMethod 方法驗證 HTTP 請求方式與指定規則是否匹配。
輸入數據的預處理與規范化在 Laravel 的全局中間件中默認包含了 TrimStrings 和 ConvertEmptyStringsToNull 兩個中間件。這些中間件被列在 AppHttpKernel 類中。它們會自動處理所有請求中傳入的字符串字段,比如將空的字符串字段轉變成 null 值。想停用這些功能,則需要在 AppHttpKernel 類的 $middleware 屬性中移除這些中間件。
獲取輸入數據Laravel 支持從 Request 中獲取常規數據、舊輸入數據、cookies。
獲取常規數據的方法有:
使用 all 方法以 數組 形式獲取到所有輸入數據。
input 方法獲取指定輸入值。
通過動態屬性獲取輸入數據。
通過 json 方法獲取 JSON 輸入信息。
通過 only/except 方法獲取部分輸入數據。
通過 has 方法確定是否有輸入值。
對于舊數據,Laravel 允許你將本次的輸入數據保留到下一次請求發送前。
這個特性在表單驗證錯誤后重新填寫表單相當有用。
獲取上傳文件的相關方法:
file 方法獲取上傳的文件。
hasFile 方法確認上傳的文件是否存在。
isValid 方法驗證上傳的文件是否有效。
UploadedFile 這個類也包含了訪問文件完整路徑和擴展的方法。
path 方法獲取路徑。
extension 方法獲取擴展名。
此外,store 方法支持上傳文件儲存到本地磁盤或者云存儲上。
0x01 HTTP 響應所有路由和控制器都會返回一個響應并返回給用戶的瀏覽器。
創建響應Laravel 支持的 HTTP 響應類型包括字符串、數組、對象、附件頭信息、附加 Cookie 等。
重定向重定向響應是 IlluminateHttpRedirectResponse 類的實例,
并且包含用戶需要重定向至另一個 URL 所需的頭信息。
Laravel 支持:
通過全局 redirect 輔助函數實現重定向。
通過 back 輔助函數實現重定向至上級頁面。
重定向至命名路由,并根據需要攜帶普通或 Eloquent 模型參數。
通過 action 方法傳遞控制器和行為名稱作為參數來實現重定向至控制器行為。
重定向至一個新的 URL 的同時通常會 附加 Session 閃存數據。
其他響應使用全局輔助函數 response 可以輕松的生成其他類型的響應實例。
響應宏自定義可以在很多路由和控制器重復使用的響應,可以使用 Response Facade 實現的 macro 方法。
0x02 表單驗證機制詳解Laravel 提供了多種不同的驗證方法來對應用程序傳入的數據進行驗證。默認情況下,Laravel 的基類控制器使用 ValidatesRequests Trait,它提供了方便的方法使用各種強大的驗證規則來驗證傳入的 HTTP 請求數據。
快速上手實例重點在于在控制器的方法中,添加驗證邏輯。
表單請求驗證這部分與上面實例的差別在于為了滿足更復雜的驗證情境,我們需要創建一個表單請求。表單請求是一個自定義的請求類,里面包含著驗證邏輯。想要運行驗證規則,在控制器方法中利用類型提示傳入請求。
在自定義的表單請求類中可以實現:
通過 rules 方法添加驗證規則。
通過 withValidator 方法在表單請求以后添加鉤子。
通過 authorize 方法授權表單請求。
重寫 AppHttpRequestsRequest 中的
formatErrors 方法來自定義錯誤格式。
重寫 messages 方法自定義錯誤消息。
手動創建驗證請求之前的內容是直接使用 ValidatesRequests Trait 的 validate 方法來實現表單驗證。此外,還可以手動創建一個 validator 實例并通過 Validator::make 方法在 Facade 生成一個新的 validator 實例來實現表單驗證。
處理錯誤消息調用 Validator 實例的 errors 方法,會得到一個 IlluminateSupportMessageBag 的實例,可以對 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 方法來注冊自定義的驗證規則。
0x03 下一步到這篇為止,我完成了 Laravel 入門指南、核心概念、HTTP 層的路由、中間件、控制器、請求、響應、表單驗證的學習和整理。這幾個部分已經可以讓你實現簡單的面向前端的接口。
接下來我將對數據庫及 ORM 部分進行學習和整理。絕大多數應用的數據都存儲在數據庫中,服務端的功能圍繞著數據庫中存儲的數據展開,從而構建了強大的應用。
0x04 寫在最后對于知識的學習,整理是非常關鍵的一環,有助于加深理解。
對于 Laravel 的學習我將持續地以思維導圖的方式整理輸出,并首發在微信公眾號 up2048 上分享給需要的讀者。
由于思維導圖在導出成圖片的過程中會變得模糊,為了方便讀者,我也提供了思維導圖源文件的下載。讀者可根據需要,關注微信公眾號:up2048,并回復“腦圖”來免費獲取。
- EOF -
推薦閱讀記一次 Laravel 應用性能調優經歷
你開發的小程序慢到令人發指可能僅僅因為它
我心目中的網絡接口設計到底是怎樣的過程?
多平臺統一用戶系統設計
十五張思維導圖帶你快速學習PHP言語基礎
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/25782.html
摘要:又限于層的內容太多,我在這篇中將整理路由中間件控制器部分內容。前者定義頁面路由,默認應用中間件組后者定義無狀態路由,會應用中間件組。命名路由可以為指定路由或者控制器方法命名,也可以為已命名的路由生成。 showImg(https://segmentfault.com/img/remote/1460000010882838); 上圖列出了 Laravel HTTP 層的相關知識大綱。由于...
摘要:為了一探究竟,于是開啟了這次應用性能調優之旅。使用即時編譯器和都能輕輕松松的讓你的應用程序在不用做任何修改的情況下,直接提高或者更高的性能。 這是一份事后的總結。在經歷了調優過程踩的很多坑之后,我們最終完善并實施了初步的性能測試方案,通過真實的測試數據歸納出了 Laravel 開發過程中的一些實踐技巧。 0x00 源起 最近有同事反饋 Laravel 寫的應用程序響應有點慢、20幾個并...
摘要:本系列思維導圖整理自版本官方文檔。思維導圖導出為圖片時會導致其變模糊。需要高清的思維導圖源文件,請關注微信公眾號,并回復精進腦圖來獲取。今天我們就通過張思維導圖來快速看入門指南。這些文章都將首發在微信公眾號上。 showImg(https://segmentfault.com/img/remote/1460000010774258); 本系列思維導圖整理自 Laravel 5.4 版...
摘要:的核心概念包括服務容器服務提供者門面契約。所有服務提供者都需要繼承類。可以為服務提供者的方法設置類型提示。方法將在所有其他服務提供者均已注冊之后調用。同樣會整理成思維導圖的形式以方便記憶與回顧。 showImg(https://segmentfault.com/img/remote/1460000010771201); Laravel 的核心概念包括:服務容器、服務提供者、門面(Fac...
摘要:合適和夠用是最完美的追求。比如從頁面去請求的資源。它允許瀏覽器向跨源服務器,發出請求,從而克服了只能同源使用的限制。定義在中的路由都是無狀態的,并且會應用中間件組。 關于作者 程序開發人員,不拘泥于語言與技術,目前主要從事PHP和前端開發,使用Laravel和VueJs,App端使用Apicloud混合式開發。合適和夠用是最完美的追求。 個人網站:http://www.linganm...
閱讀 1393·2021-11-22 15:11
閱讀 2837·2019-08-30 14:16
閱讀 2755·2019-08-29 15:21
閱讀 2914·2019-08-29 15:11
閱讀 2450·2019-08-29 13:19
閱讀 2985·2019-08-29 12:25
閱讀 417·2019-08-29 12:21
閱讀 2828·2019-08-29 11:03