今天要來分享關於 Laravel Request 概念,Request 代表了來自客戶端(瀏覽器)的HTTP請求。這個類型的物件允許您輕鬆地訪問HTTP請求中的各種數據,例如表單數據、路由參數、Cookie、HTTP標頭等。 現在我們來定義及應用吧!
在 Laravel 中,Request 是處理 HTTP 請求的類別,可以用來取得、驗證、處理 HTTP 請求資料。而使用 Request 可以更輕鬆地取得 HTTP 請求資料,讓我們不再需要透過 PHP 原生的 $_GET、$_POST、$_COOKIE、$_FILES
等全域變數來取得資料。Request 的使用也可以讓我們更容易地驗證請求資料、處理表單資料等等。也是 Laravel 中的重要元件,幾乎所有的控制器都會使用 Request 來取得 HTTP 請求資料。
Request 透過 Dependency Injection(依賴注入)的方式注入到控制器(Controller)中,使用方法非常簡單。以下是一個使用 Request 取得表單資料的範例:
<?php
namespace App\\Http\\Controllers;
use Illuminate\\Http\\Request;
class UserController extends Controller
{
public function store(Request $request) <---依賴注入
{
$name = $request->input('name');
$email = $request->input('email');
.....
}
}
在上面的範例中,我們可以看到 Request 透過依賴注入的方式被注入到 store 方法中,我們可以透過 $request
變數來取得表單資料。範例中使用的 input
方法可以用來取得表單欄位的值,我們透過$request->input('name')
取得名為 name 的欄位的值。
而當使用input()
這個方法取得請求的值時,也可使用另一種取得方式,改用 query()
這個方法。
// 這樣的寫法可以取得名為 name 的欄位的值。
$name = $request->query('name');
你也可以將預設值作為 query()
的第二參數傳入,那樣的話,如果找不到值就會回傳預設值,舉例如下
// 如果找不到名為name的值,則預設為空字串
$name = $request->query('name', '');
你也可以直接呼叫 query()
而不傳入任何參數,這將會回傳所有的查詢字串輸入項的值,並以陣列的形式
// 不傳入任何參數名,直接傳回陣列方式
$data = $request->query();
而明白依賴注入的行為後,我們也可以在路由檔 route.php
的 Closure
直接使用 Request 類別,服務容器也會自動的在執行時把進來的請求自動注入進來,直接在路由檔裡面做$request
處理 (但基本我任職的公司都不太這樣寫,不易管理檔案程式碼職責)。
use Illuminate\Http\Request; //引入Class
Route::get('/',function (Request $request) {
// todo
});
而 Laravel 對於HTTP 請求資料處理,也提供許多$request
參數應用,以下列出常見的參數應用供參考
$request->all()
: 獲取請求中的所有輸入數據,包括 GET 和 POST 數據。$request->input('key')
: 獲取特定鍵名('key')的輸入數據。$request->only(['key1', 'key2'])
: 獲取指定鍵名的輸入數據,可以傳遞一個鍵名數組。$request->except(['key1', 'key2'])
: 獲取除指定鍵名之外的所有輸入數據。2. 獲取請求方法和路徑:
$request->method()
: 獲取請求的 HTTP 方法(GET、POST、PUT、DELETE 等)。$request->path()
: 獲取請求的路徑(不包括域名)。$request->header('headerName')
: 獲取特定請求頭的值。$request->url()
: 獲取完整的請求 URL。$request->fullUrl()
: 獲取完整的請求 URL,包括查詢參數。$request->getQueryString()
: 獲取查詢字符串部分。$request->cookie('cookieName')
: 獲取特定 Cookie 的值。$request->file('fileInputName')
: 獲取上傳的文件,其中 'fileInputName' 是文件上傳字段的名稱。$request->hasFile('fileInputName')
: 檢查是否有文件上傳。$request->query('key')
: 獲取 URL 查詢參數的值。$request->query()
或 $request->all()
: 獲取所有的查詢參數。$request->route('parameterName')
: 獲取路由參數的值。9.獲取請求的會話數據
$request->session()
: 獲取會話數據。$request->has('key')
: 檢查是否存在指定鍵名的參數。$request->filled('key')
: 檢查指定鍵名的參數是否有值。11.取得來源IP
$request->ip()
: 取得client 端 ip 上面列出是在開發上較常用的一些方法,實際應用方法更多,大家可以點進去namespace Illuminate\Http\Request
裡檔案查看。
下一篇會針對路由參數及隱式綁定做更深一步的說明~