通常在Controller 中會使用依賴注入的方式取得 HTTP 請求
在Controller的時候就會像這樣使用
<?php
namespace App\Http\Controllers;
use App\Services\ProductService;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request; //宣告Request
class ProductController extends Controller
{
protected $productService;
public function update(Request $request) //DI 取得request
{
$data = $this->productService->update(json_decode($request->getContent()));
return response()->json($data);
}
}
配合route有帶入參數的話
Route::put('product/{id}', 'ProductController@update');
/**
* Update product data.
*
* @param Request $request
* @param string $id
* @return Response
*/
public function update(Request $request, $id)
{
//
}
另外像request的話其實在laravel有已經封裝好的方法可以直接使用
$uri = $request->path();
會得到 route 裡面設定的"api/product"
,還可以用 is
驗證傳入的route// Without Query String...
$url = $request->url();
$url = $request->fullUrl();
取得request 方法: $method = $request->method();
,一樣可以用 isMethod
判斷
取得所有input: $input = $request->all();
//得到的會是array
取得特定欄位:
$name = $request->input('name', 'Book'); //第二個欄位為預設值,可不填
//或是可以直接
$name = $request->name;
//如果是array形式的input,可以使用"."語法取得陣列:
$name = $request->input('products.0.name');
$names = $request->input('products.*.name');
$input = $request->only(['id', 'name']);
$input = $request->except(['price']);
可以用 has
或是 filled
確認是否有輸入值 [兩個確認的內容有點不同要注意]
//取得所有query string 參數和值
$query = $request->query();
//取得query string 中 name的value
$name = $request->query('name');
//取得query string 中 name的value,如果沒有,預設會是Helen
$name = $request->query('name', 'Helen');
結論: 其他還有像取得session, cookies或是直接redirect的方法可以用,上面舉的都是比較常會使用的例子,有興趣可以再看官網的更多細節實作。
參考連結: