# Laravel Requests https://laravel.com/docs/8.x/requests # Interacting With The Request Laravel 提供 `Illuminate\Http\Request` 這個 class 去存取進來的請求,透過 dependency injection 去注入 request instance 範例 ```php= <?php // route file use App\Http\Controllers\UserController; Route::put('/user/{id}', [UserController::class, 'update']); ``` ```php= <?php // Controller file namespace App\Http\Controllers; use Illuminate\Http\Request; class UserController extends Controller { /** * Store a new user. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function update(Request $request) { $name = $request->input('name'); // } } ``` # Request methods ```php= <?php return [ 'path' => $request->path(), // 取得 Request Path 'is' => $request->is('admin/*'), // 是否符合這個 pattern 'routeIs' => $request->routeIs('admin.*'), // 是否符合 named route 'url' => $request->url(), // url 沒有 query string 'fullUrl' => $request->fullUrl(), // url 有 query string 'method' => $request->method(), // 回傳 http verb 'isMethod' => $request->isMethod('post'), // 是不是某個 http verb // header 'header' => $request->header('X-Header-Name'), // 拿某個 header值 'header' => $request->header('X-Header-Name', 'default'), // 拿某個 header值 沒有就預設 'hasHeader' => $request->header('X-Header-Name'), // 有沒有某個 header 'bearerToken' => $request->bearerToken(), // 從 Authorization header 裡拿 //ip 'ip' => $request->ip(),// 拿取 ip // Content Negotiation 'contentTypes ' => $request->getAcceptableContentTypes(), // 取得 accept 的 content types 'accepts' => $request->accepts(['text/html', 'application/json']), // 只能接受陣列內的 content types 'prefers' => $request->prefers(['text/html', 'application/json']), 'expectsJson' => $request->expectsJson(), // expects a JSON response ]; ``` 結果 ```json= { "path": "api/test", "is": false, "routeIs": false, "url": "http://localhost/api/test", "fullUrl": "http://localhost/api/test?type=1", "method": "GET", "isMethod": false, "header": "default", "hasHeader": null, "bearerToken": null, "ip": "::1", "contentTypes ": [ "*/*" ], "accepts": true, "prefers": "text/html", "expectsJson": false } ``` # PSR-7 Requests 頃向使用 psr-7 request 而非 laravel request 可以參照下面的網址去安裝和使用 https://laravel.com/docs/8.x/requests#psr7-requests # Input ```php= <?php return [ 'all' => $request->all(), // 取得所有 input data 回傳是陣列 'collect' => $request->collect(), // 取得所有 input data 回傳是collection 'collect_subset' => $request->collect('users')->each(function ($user) { // 取得某個 subset 並且用 collection 的形式去跑 }), 'input' => $request->input('name'), // 取得某個key的值 'default_input' => $request->input('name', 'Sally'), // 取得某個key的值沒有就預設 'dot' => $request->input('products.0.name'), 'dot_wildcard' => $request->input('products.*.name'), 'query_string' => $request->query('name'), // 取得 query string variable 'query_string_default' => $request->query('name', 'Helen'), // 取得 query string variable 沒有就預設 'json' => $request->input('user.name'), // json input value 'boolean' => $request->boolean('archived'), // true for 1, "1", true, "true", "on", and "yes" // 'date' => $request->date('birthday'), // carbon instance 'only' => $request->only(['username', 'password']), // 只有某些值 'except' => $request->except(['credit_card']), // 除了某些值 'has' => $request->has('name'), // 是否有某個值 'has_multiple' => $request->has(['name', 'email']), // 是否有某些值 // 'flash' => $request->flash() 將 current input to the session 'cookie' => $request->cookie('name'), // 取得 cookie 的某個值 所有laravel 的 cookie 都會被加密 //file 'file' => $request->file('photo'), // 取得檔案會是 Illuminate\Http\UploadedFile 的格式 'hasFile' => $request->hasFile('photo'), // 是否有這個檔案 // 'file_path' => $request->photo->path() // 取得 file path // 'extension' => $request->photo->extension() // 取得 file extension // 'store' => $request->photo->store('images', 's3') // 儲存檔案 // 'storeAs' => $request->photo->storeAs('images', 'filename.jpg', 's3') // 另存檔案名稱為 ]; ``` 結果 ```json= { "all": { "type": "1" }, "collect": { "type": "1" }, "collect_subset": [], "input": null, "default_input": "Sally", "dot": null, "dot_wildcard": null, "query_string": null, "query_string_default": "Helen", "json": null, "boolean": false, "only": [], "except": { "type": "1" }, "has": false, "has_multiple": false, "cookie": null, "file": null, "hasFile": false } ``` ###### tags: `2022` `laravel` `request` `file` {%hackmd BJrTq20hE %}