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')
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