Response trong Laravel 8

Như chúng ta đã tìm hiểu ở Laravel docs trước đó tất cả các route hay controller trong Laravel đều phải trả về một response. Giống Laravel xx thì Laravel 8 cũng cung cấp sẵn một Response class để hỗ trợ chúng ta trả về các loại response data một cách đơn giản nhất. Trong bài học này chúng ta sẽ tìm hiểu về Response trong Laravel 8 đó các bạn nhé!

1. Response Data.

Mặc định khi một route hay controller trả về giá trị là chuỗi thì Laravel sẽ tự động convert nó về dạng một HTTP response.

Ví Dụ 1 :

Khai báo route sau trong routes/web.php

Route::get('/', function () {
    return 'Xin chào các bạn';
});

Kết quả: Truy cập http://localhost:8000/ bật Chrome Developer Tools vào phần Network để check Request từ trình duyệt

F5 chúng ta check được như sau

Ngoài ra nếu bạn trả về một mảng thì laravel cũng sẽ tự convert nó về dạng một JSON response.

Ví Dụ 2:

Route::get('/', function () {
    return [1, 2, 3];
});

Kết quả:

Tuy nhiên, trong thực tế chúng ta lại cần trả về response với các header và các status khác nhau. Lúc này chúng ta có thể sử dụng Response (Illuminate\Http\Response) của Laravel. Đồng thời Laravel cũng có đưa Response class vào helper. Nên chúng ta hoàn toàn có thể sử dụng hàm response() trong helper thay cho Response class để code được ngắn gọn hơn.

Ví Dụ 3 : Thay vì để laravel tự động convert như Ví Dụ 1 chúng ta có thể viết dưới dạng.

Route::get('/', function () {
    return response('Xin chào các bạn', 200)->header('Content-Type', 'text/plain');
});

Trong đó: 200 là http code trả về.

Ví Dụ 4: Tương đương với trường hợp Ví Dụ 2, chúng ta có thể viết dưới dạng.

Route::get('/', function () {
    return response()->json([1, 2, 3, 4, 5]);
});

Để đưa thêm header vào trong response chúng ta sử dụng phương thức header với cú pháp:

header($headerName, $headerContent);

Trong đó:

  • $headerName là tên của header bạn muốn thêm.
  • $headerContent là giá trị của header đó.

Ví Dụ 5:

return response($content)
            ->header('Content-Type', $type)
            ->header('X-Header-One', 'Header Value')
            ->header('X-Header-Two', 'Header Value');

Phương thức withHeaders

Đoạn code trên có thể viết ngắn gọn với phương thức withHeaders như sau

return response($content)
            ->withHeaders([
                'Content-Type' => $type,
                'X-Header-One' => 'Header Value',
                'X-Header-Two' => 'Header Value',
            ]);

Sử dụng phương thức cookie với cú pháp truyền vào tương tự như đối với hàm setcookie.

return response('Xin chao')->cookie(
 'name', 'value', $minutes
);

Nếu bạn muốn xóa một cookie nào đó trong response bạn có thể sử dụng phương thức withoutCookie.

return response('Hello World')->withoutCookie('name');

2. Redirect Response.

Laravel 8 cũng có sẵn cho bạn một class Illuminate\Http\RedirectResponse để làm trả về một redirect response. Đồng thời cũng đã đưa nó vào helper để tiện cho việc sử dụng. Chúng ta có thể sử dụng helper redirect thay cho class trên.

Redirect về URL /home/dashboard khi người dùng vào URL /dashboard.

Route::get('/dashboard', function () {
    return redirect('home/dashboard');
});

Trong trường hợp bạn muốn redirect về URL user vừa truy cập trước đó, bạn có thể sử dụng hàm back.

Route::post('/user/profile', function () {
 // Validate the request...

 return back()->withInput();
});

Redirect đến một route

Bạn cũng có thể redirect đến một route nào đó bằng cách sử dụng phương thức route.

return redirect()->route('login');

Redirect sang một domain khác

Nếu như bạn muốn redirect sang một domain khác, bạn có thể sử dụng phương thức away.

return redirect()->away('https://www.google.com');

3. File Response.

Nếu bạn muốn response về một file bạn có thể sử dụng phương thức file với cú pháp:

return response()->download($pathToFile);

// Hoặc

return response()->download($pathToFile, $name, $headers);

Trong đó:

  • $pathToFile là path đến file bạn muốn trả về.
  • $name là tên của file bạn muốn trả về.
  • $headers là các header bạn muốn trả về kèm theo. Cú pháp giống phương thức header ở trên.

Ngoài ra bạn cũng có thể response về một file hiển thị trên trình duyệt được như PDF. Bằng cách sử dụng phương thức file với cú pháp:

return response()->file($pathToFile);

// hoặc

return response()->file($pathToFile, $headers);

Trong đó:

  • $pathToFile là path đến file bạn muốn trả về.
  • $name là tên của file bạn muốn trả về.

Response stream data

Đôi khi bạn muốn trả về một nội dung nào đó có thể download được, nhưng lại không muốn ghi chúng vào ổ trước khi download. Bạn có thể sử dụng method streamDownload để trả về một stream data.

return response()->streamDownload(function () {
 echo GitHub::api('repo')
 ->contents()
 ->readme('laravel', 'laravel')['contents'];
}, 'laravel-readme.md');

4. Lời kết.

Thực tế còn nhiều Response trong Laravel 8 nữa thế nhưng ở đây chúng ta chỉ tìm hiểu về những trương fhowpj phổ biến mà thôi. Chúc các bạn học tốt!

Bình luận