Laravel Tutorial

Bài 10: Request trong Laravel – Phần 1

Request trong Laravel là một object chưa các thông tin liên quan đến HTTP request hiện tại. Dựa vào object này chúng ta có thể lấy được các thông tin như input, cookie, file,…

# Tương tác với Request trong Laravel

Mặc định Request object đã được binding vào service container của Laravel rồi, nên chúng ta muốn dùng nó thì có thể binding trực tiếp vào trong argument khi cần

Inject trong Route

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Route;
Route::get('home', function (Request $request) {
   // code
});

Inject trong Controller

<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{   
   public function store(Request $request)
   {
      $name = $request->input('name');    
   }
}

Lúc này ở route bạn sẽ không cần phải khai báo param $request nữa

use App\Http\Controllers\UserController;
Route::post('/user', [UserController::class, 'store']);

$request->path()

Phương thức trả về thông tin đường dẫn của request

File resources/web.php

Route::get('home', function (Request $request) {
   return "Path: " . $request->path();
});

Kết quả:

 

$request->url()

Phương thức url() trả về đường dẫn của URL không chưa query string

File resources/web.php

Route::get('home', function (Request $request) {
   return "Path: " . $request->url();
});

Kết quả:

$request->fullUrl()

Phương thức này cũng giống như phương thức url() chỉ có điều là nó trả về đẩy đủ URL kể cả query string

File resources/web.php

Route::get('home', function (Request $request) {
   return "Path: " . $request->fullUrl();
});

Kết quả:

Trong trường hợp bạn muốn add thêm query vào trong path các bạn có thể sử dụng phương thức fullUrlWithQuery

File resources/web.php

use Illuminate\Http\Request;
Route::get('home', function (Request $request) {
   return "Path: " . $request->fullUrlWithQuery(['name'=>'John']);
});

Kết quả:

$request->is()

Phương thức is() cho phép kiểm tra xem đường dẫn request có khớp với một mẫu hay không, sử dụng ký tự * để trùng khớp tất cả

File resources/web.php

use Illuminate\Http\Request;
Route::get('category/create', function (Request $request) {
   if($request->is('category/*')) {
      return 'Valid';
   }
   else {
      return 'Invalid';
   }
});

Kết quả:

$request->method()

Phương thức method() trả về hành động của request là GET hay POST …

Ngoài ra bạn cũng có thể sử dụng isMethod để xác định hành động có phải là GET, POST … hay không?

File resources/web.php

use Illuminate\Http\Request;
Route::get('home', function (Request $request) {
   $method = $request->method();
   if ($request->isMethod('get')) {
      echo 'GET request';
   } else {
      echo 'POST request';
   };
});

Kết quả: GET request

$request->route()->getName()

Phương thức này nếu ta đặt tên cho Route thì nó sẽ trả cho chúng ta name của route đó

File resources/web.php

use Illuminate\Http\Request;
Route::get('home', function (Request $request) {
   return $request->route()->getName();
})->name('home');

Kết quả: home

$request->ip()

Phương thức này trả về địa chỉ ip của người dùng

use Illuminate\Http\Request; 
Route::get('home', function (Request $request) { 
   $ipAddress = $request->ip();
   echo "Địa chỉ IP người dùng: {$ipAddress}";
})->name('home');

Kết quả: Địa chỉ IP người dùng: 127.0.0.1

$request->server()

  • Phương thức này trả về các thông tin liên quan đến máy chủ.
  • Một số thông tin hay được sử dụng:
    • REQUEST_TIME: thời gian yêu cầu gửi đến máy chủ web
    • QUERY_STRING: query string trong URL
    • URL_REFERER: đường dẫn url tham chiếu
    • SERVER_ADDR: Địa chỉ máy chủ
    • REQUEST_SCHEME: giao thức sử dụng

Ví dụ:

use Illuminate\Http\Request; 
Route::get('home', function () {
   $serverAddress = $request->server('SERVER_ADDR');
   echo "Địa chỉ IP máy chủ: . {$serverAddress}";
});

$request->header()

Phương thức này trả về các thông tin header của request như: thông tin về trình duyệt sử dụng user-agent, thông tin về dữ liệu cookie, trong tin về host yêu cầu …

app/Http/Controllers/CategoryController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CategoryController extends Controller
{
   public function getInfo(Request $request){
      $ipAddress = $request->ip();
      echo "<p>Địa chỉ IP người dùng: {$ipAddress}</p>";

      $serverAddress = $request->server('SERVER_ADDR');
      echo "<p>Địa chỉ IP máy chủ: {$serverAddress}</p>";

      $urlReferer = $request->server('URL_REFERER');
      echo "<p>Đường dẫn xuất phát: ' . {$urlReferer}</p>";

      $userAgent = $request->header('User-Agent');
      echo "<p>Thông tin về trình duyệt: {$userAgent}</p>";
   }
}
?>
resources/web.php
Route::get('category', '\App\Http\Controllers\CategoryController@getInfo');
$request->route('category')
Phương thức này sẽ trả ra instance của Category. Khi đường dẫn bạn gửi lên http://localhost:8000/category/1 thì ở trong controller ta sử dụng $request->route(‘category’) thì nó trả ra cho ta category có id = 1 nếu trong database có
app/Http/Controllers/CategoryController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class CategoryController extends Controller
{
   public function Update(Category $category, Request $request){
   $category = $request->route('category');
}
?>
resources/web.php
Route::get('category/{category}', '\App\Http\Controllers\CategoryController@Update')->name('category.update');

Leave a Comment