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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

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

發布時間:2023/12/31 综合教程 51 生活家
生活随笔 收集整理的這篇文章主要介紹了 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.獲取輸入數據

獲取特定輸入值

你可以通過 IlluminateHttpRequest 的實例,不需要去擔心發出請求時使用的 HTTP 動作,因為它們獲取輸入數據的方式都是相同的。

  $name = $request->input('name');

此外,可以使用 IlluminateHttpRequest 的屬性訪問用戶輸入。

  $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

IlluminateHttpRequest 實例的 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 IlluminateHttpResponse;

  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 輔助函數且不帶任何參數時,將會返回 IlluminateRoutingRedirector 的實例,你可以對該 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


總結

以上是生活随笔為你收集整理的laravel框架总结(一) -- 请求和响应的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。