laravel框架总结(一) -- 请求和响应
一.laravel請求
1.獲取請求
1>獲取請求的 URI
path 方法會返回請求的 URI。所以,如果接收到的請求目標是 http://domain.com/foo/bar,那么 path 方法就會返回 foo/bar:
$uri = $request->path();
is 方法可以驗證接收到的請求 URI 與指定的規則是否相匹配。使用此方法時你可以將 * 符號作為通配符:
if ($request->is('admin/*')) { // }
使用 url 方法,可以獲取完整的網址:
$url = $request->url();
2>獲取請求的方法
method 方法會返回此次請求的 HTTP 動作。也可以通過 isMethod 方法來驗證 HTTP 動作和指定的字符串是否相匹配:
$method = $request->method(); if ($request->isMethod('post')) { // }
2.獲取輸入數據
獲取特定輸入值
你可以通過 Illuminate\Http\Request 的實例,不需要去擔心發出請求時使用的 HTTP 動作,因為它們獲取輸入數據的方式都是相同的。
$name = $request->input('name');
此外,可以使用 Illuminate\Http\Request 的屬性訪問用戶輸入。
$name = $request->name;
可以在 input 方法的第二個參數中傳入一個默認值。當請求的輸入數據不存在于此次請求時,就會返回默認值:
$name = $request->input('name', 'Sally');
如果是「數組」形式的輸入數據,則可以使用「點」語法來獲取數組:
$input = $request->input('products.0.name');
確認是否有輸入值
使用 has 方法。當該數據存在并且字符串不為空時,has 方法就會傳回 true:
if ($request->has('name')) { // }
獲取所有輸入數據
你也可以使用 all 方法以 數組 形式獲取到所有輸入數據:
$input = $request->all();
獲取部分輸入數據
如果你想獲取輸入數據的子集,則可以使用 only 及 except 方法。這兩個方法都接受單個數組或是動態列表作為參數:
$input = $request->only(['username', 'password']);
$input = $request->only('username', 'password');
$input = $request->except(['credit_card']);
$input = $request->except('credit_card');
?3.舊輸入數據
Laravel 可以讓你將本次的輸入數據保留,它只在下一次的請求內有效.可以使用 flash 方法保存 session,將數據保留到下個 HTTP 請求,然后就會被自動刪除,這對于在表單驗證失敗后重新填入表單值相當有用.
舉例:登錄操作
登錄失敗,再次跳轉到登錄頁面,此時我們不做任何操作,其實后臺已經發送了一次請求到/user/login,進行登錄失敗的跳轉操作,此時閃存內容還存在.
我們再次刷新頁面,會再次產生一次請求,此時閃存內容就不存在了
將輸入數據閃存至 Session
Illuminate\Http\Request 實例的 flash 方法會將當前的輸入數據存進session中,所以下次用戶發出請求至應用程序時就可以使用它們:
$request->flash();
你也可以使用 flashOnly 及 flashExcept 方法將請求數據的子集保存至 Session:
$request->flashOnly('username', 'email');
$request->flashExcept('password');
閃存輸入數據至 Session 后重定向
你可能需要將輸入數據閃存并重定向至前一頁,這時只要在重定向方法后加上 withInput 即可:
return redirect('form')->withInput();
return redirect('form')->withInput($request->except('password'));
獲取舊輸入數據
注意上面兩種閃存方式使用session('username')是拿不到數據的,若要獲取上一次請求后所閃存的輸入數據,則可以使用 Request 實例中的 old 方法,
$username = $request->old('username');
Laravel 也提供了全局輔助函數 old。如果你要在Blade模板中顯示舊輸入數據,可以使用更加方便的 old 輔助函數:
{{old('username')}}
?二.laravel響應
1.基本響應
1>返回一個字符串,指定的字符串會被框架自動轉換成 HTTP 響應。
Route::get('/', function () { return 'Hello World'; });
?
2>返回一個完整的 Response 實例時,就能夠自定義響應的 HTTP 狀態碼以及標頭。
use Illuminate\Http\Response;
Route::get('home', function () {
return (new Response($content, $status)) ->header('Content-Type', $value);
});
為了方便起見,你可以使用輔助函數 response:
Route::get('home', function () {
return response($content, $status) ->header('Content-Type', $value);
});
2.其它響應類型
1>視圖響應
如果你想要控制響應狀態碼及標頭,同時也想要返回一個視圖作為返回的內容時,則可以使用 view 方法:
return response()->view('hello', $data)->header('Content-Type', $type);
當然,如果你沒有自定義 HTTP 狀態碼及標頭的需求,則可以簡單的使用全局的 view 輔助函數。
return view('hello',$data);
2>JSON 響應
json 方法會自動將標頭的 Content-Type 設置為 application/json,并通過 PHP 的 json_encode 函數將指定的數組轉換為 JSON:
return response()->json(['name' => 'Abigail', 'state' => 'CA']);
如果你想創建一個 JSONP 響應,則可以使用 json 方法并加上 setCallback:
return response()->json(['name' => 'Abigail', 'state' => 'CA']) ->setCallback($request->input('callback'));
3>文件下載
download 方法可以用于生成強制讓用戶的瀏覽器下載指定路徑文件的響應。download 方法接受文件名稱作為方法的第二個參數,此名稱為用戶下載文件時看見的文件名稱。最后,你可以傳遞一個 HTTP 標頭的數組作為第三個參數傳入該方法:
return response()->download($pathToFile);
return response()->download($pathToFile, $name, $headers);
3.重定向
1>簡單重定向
最簡單的方式就是通過全局的 redirect 輔助函數:
Route::get('dashboard', function () { return redirect('home/dashboard'); });
有時你可能希望將用戶重定向至前一個位置,例如當提交一個無效的表單之后。這時可以使用全局的 back 輔助函數來達成這個目的:
Route::post('user/profile', function () { // 驗證該請求... return back()->withInput(); });
2>重定向至命名路由
當你調用 redirect 輔助函數且不帶任何參數時,將會返回 Illuminate\Routing\Redirector 的實例,你可以對該 Redirector 的實例調用任何方法。舉個例子,要生成一個 RedirectResponse 到一個命名路由,你可以使用 route 方法:
return redirect()->route('login');
如果你的路由有參數,則可以將參數放進 route 方法的第二個參數:
// 重定向到以下 URI: profile/{id} return redirect()->route('profile', [1]);
如果你要重定向至路由且路由的參數為 Eloquent 模型的「ID」,則可以直接將模型傳入,ID 將會自動被提取:
return redirect()->route('profile', [$user]);
3>重定向至控制器行為
請記得,你不需要指定完整的命名空間,因為 Laravel 的 RouteServiceProvider 會自動設置默認的控制器命名空間:
return redirect()->action('HomeController@index');
當然,如果你的控制器路由需要參數的話,你可以傳遞它們至 action 方法的第二個參數:
return redirect()->action('UserController@profile', [1]);
4>重定向并加上 Session 閃存數據
通常重定向至新的 URL 時會一并寫入閃存數據至session。所以為了方便,你可以利用鏈式調用的方式創建一個 RedirectResponse 的實例并閃存數據至 Session。這對于在一個動作之后保存狀態消息相當方便:
Route::post('user/profile', function () {
// 更新用戶的個人數據...
return redirect('dashboard')->with('status', 'Profile updated!');
});
當然,在用戶重定向至新的頁面后,你可以獲取并顯示session的閃存數據,注意這里閃存的信息和使用使用$request->flash()閃存數據提出方法不同,old('status')是取不到的,要使用session('status')
@if (session('status'))
<div class="alert alert-success"> {{ session('status') }} </div>
@endif
? ?轉載于:https://www.cnblogs.com/ghjbk/p/6636881.html
總結
以上是生活随笔為你收集整理的laravel框架总结(一) -- 请求和响应的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JS 原生 AJax
- 下一篇: 高性能网站架构设计之缓存篇(6)- Re