日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

laravel框架总结(一) -- 请求和响应

發(fā)布時(shí)間:2023/12/20 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 laravel框架总结(一) -- 请求和响应 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一.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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。