17. Các loại response khác Streamed download (Other response types)(ok)

https://viblo.asia/p/tap-17-response-laravel-aWj534RGK6m

Nếu bạn muốn trả về response của các image, pdf... để hiển thị trên trình duyệt người dùng thay vì tải về, bạn có thể sử dụng method file. Method này chấp nhận tham số thứ nhất là path file cần hiển thị, tham số thứ hai tùy chọn chứa mảng thiết lập header response.

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

Lưu ý: Base path của đường dẫn file trong method file cũng là public giống như method download.

Chẳng hạn mình sẽ thêm một ảnh trong folder public.

Sau đó mình đăng ký một route như sau:

Route::get('/image', function() {
    return response()->file('image.jpg');
});

Và đây là kết quả:

IV. Reponse macro

Trước khi nói phần này thì chúng ta cùng tìm hiểu chút về thuật ngữ "Macro", vì xuyên suốt series có thể ta sẽ gặp rất nhiều. Hiểu nôm na thì "Macro" định nghĩa một lệnh riêng lẽ, trong đó sẽ thực hiện các chuỗi lệnh nào đó để trả về kết quả, đại loại là khá giống với function.

Nếu bạn thích tự định nghĩa một loại response tùy chỉnh để sử dụng trong nhiều route và controller, bạn có thể sử dụng phương thức macro của Response facade. Bạn có thể tạo một service provider với tên ResponseMacroServiceProvider chẳng hạn, tại method boot bạn sẽ thực hiện việc định nghĩa các custom response.

Chẳng hạn mình muốn tạo một response để có thể trả về chuỗi in hoa, mình sẽ đăng ký với macro như sau:

use Illuminate\Support\Facades\Response;

public function boot()
{
    Response::macro('caps', function ($value) {
        return Response::make(strtoupper($value));
    });
}

Như bạn thấy chúng ta sẽ sử dụng hai method Response::macroResponse::make.

Với method Response::macro: dùng để định nghĩa một custom response

  • Tham số thứ nhất sẽ là tên của custom response.

  • Tham số thứ hai sẽ là một Closure, nhận dữ liệu truyền về qua $value.

Với method Response::make: dùng để tạo response, nó sẽ nhận tham số là các chuỗi xử lý $value trước khi được trả về.

Ok, vậy ta đã có thể sử dụng response caps như những các loại response khác.

Route::get('caps/{str}', function($str) {
    return response()->caps($str);
});

Nhớ đừng quên liệt kệ service provider vừa tạo trong config/app.php nhé.

Cảm ơn các bạn đã quan tâm theo dõi. Cùng đồng hành với mình qua những tập tiếp theo tại series "Hành trình chinh phục Laravel Framework" nhé! Chúc may mắn và hẹn gặp lại.

Last updated