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