Laravelaravel應用程式與使用者打交道,就從他們拿到資料的資料開始! ,希望對需要的朋友有幫助!
本來講完路由和控制器,應該接著講一講視圖的,但是鑑於視圖的功能實在太枯燥,況且是前端頁面,免不了寫一些js和css。而laravel是偏重後端的,所以為了給後端的開發同學緩衝的時間,我們跳過視圖,先來說說用戶資料的獲取和處理,這幾乎是任何應用必備之功能。
用戶資料同時又是危險的!本文不會教你規避危險!
我們在講路由規劃的時候,說瞭如何使用url的位置參數綁定的方式進行導向,其實那也是一種獲取用戶輸入資料的方式,
只不過,傳入的位置參數一般都人畜無害,公開訪問,任你來來去去。
如果是單一使用者的私密數據,必然是不能直接url內嵌傳輸的。
laravel把使用者的輸入儲存在Input 物件內,而從邏輯上看,使用者輸入應該歸屬於請求項的,所以Request 也繼承了Input 的方法和資料。
例如有下面的路由:
Route::post('form', function (Illuminate\Http\Request $request) { // $request->method()});
模擬的是一個表單位址,透過post方法傳送數據,然後使用 Request 方法。可供使用的取得方法,我們一一道來。
先說說 $request->all(),這一個是列印所有的輸入數據,例如表單內可能有下面這些欄位。 HTML 內容你們將會看哈!
為了調試數據,我們的路由這樣註冊:
Route::post('/post-route', function (Request $request) { var_dump($request->all());});
大家猜猜會輸出些什麼內容呢?
/** * [ * '_token' => 'CSRF token here', * 'firstName' => 'value', * 'utm' => 12345 * ] */
沒錯兒,就是看到的post表單的欄位firstName,還有querystring 的查詢參數utm,還有一個是用於CSRF 防護的laravel內建函數,預設的表單欄位就是 __token,所以大可不必費心。
但是有程式碼潔癖的同學會覺得受不了,這個不是我的字段,我在程式碼裡也用不到,我不想看到這個 __token,這個陌生的變數。可以,我們在請求參數內直接過濾掉就好了:
Route::post('/post-route', function (Request $request) { var_dump($request->except('_token'));});
其中,except() 方法就是用來過濾某些字段,不需要使用的。與之對應的就是 only() 方法,是指定哪些是用的欄位。這樣用:
$request->only(['firstName', 'utm']);
還有些時候邏輯判斷有些鍵是否存在,laravel提供了兩種方式判斷是否存在,一個是 has ,一個是 exists。有同學會疑問,為什麼有了 has還要 exists呢?因為他們的作用不同。
has方法不僅會判斷該鍵存在,如果該鍵的值是空(例如null,空字串,false,0,空數組,空物件等等),也是判斷為false的。所以有必要使用 exists 單純地判斷鍵的存在與否,大家用的時候一定要注意這個細微的差別。
用法很簡單,直接呼叫方法即可:
if ($request->has('utm')) { // Do some work}
如果對於輸入值鍵不存在,我們也可以為其設定一個預設值,這就是input方法的第二個參數,使用如下呼叫:
Route::post('/post-route', function (Request $request) { $userName = $request->input('name', 'anonymous');});
如果使用者沒有傳入name 字段,那麼就用anonymous 取代。
上面說的都是簡單的鍵值對,還有一種表單,傳入的欄位可能會是數組,例如下面這個:
laravel內取得數組可以使用點式方式讀取,這是因為laravel解析的時候使用了助手類別Arr 的通用方法。例如取得某個鍵:
$employeeZeroFirstName = $request->input('employees.0.firstName');
明確地指定鍵名,並對應好層級即可。也可以使用星號來匹配某一層級所有的鍵:
$allLastNames = $request->input('employees.*.lastName');
或僅指定某個鍵,後面不管多少層級原樣返回:
$employeeOne = $request->input('employees.1');
具體用法讀者可以查看原始碼或文檔,深入研究一下Arr操作類別的用法。
本文幾乎涵蓋了使用者輸入input方法的最常用的一些方法,我們只講了怎麼正常地取得使用者資料,沒有講如何驗證資料有效性。因為前端驗證幾乎形同虛設,最後能寫到資料庫的數據,還是要應用程式把關。
那就是驗證器的工作了,驗證器,我們放到後續章節再詳細地講。
以上是Laravel應用程式跟用戶打交道,就從拿到他們的資料開始!的詳細內容。更多資訊請關注PHP中文網其他相關文章!