Bài 12: URL Generation trong Laravel

Bài 12: URL Generation trong Laravel

Laravel cung cấp một số trợ giúp để hỗ trợ bạn tạo URL cho ứng dụng của mình. Điều này rất ích khi xây dựng liên kết trong các templates và API responses của bạn hoặc khi tạo chuyển hướng đến một trang khác trong ứng dụng của bạn.

Tạo URL cơ bản

url helper có thể được sử dụng để tạo URL tùy ý cho ứng dụng của bạn. URL được tạo sẽ tự động sử dụng  HTTP hoặc HTTPS tùy thuộc vào URL website của các bạn:

$post = App\Post::find(1);

echo url("/posts/{$post->id}");

// http://example.com/posts/1

// hoặc

//  https://example.com/posts/1

Lấy URL hiện tại

Với phương thức url()->current() sẽ giúp bạn lấy được địa chỉ hiện tại đang truy cập trên thanh địa chỉ của trình duyệt

// Phương thức này trả về đường dẫn đầy đủ của URL không có query string. ví dụ đường dẫn https://vietlaravel.com/?page=2

echo url()->current(); // Kết quả: https://vietlaravel.com

// Phương thức này trả về đường dẫn URL đầy đủ cả query string. ví dụ đường dẫn https://vietlaravel.com/?page=2

echo url()->full(); // Kết quả: https://vietlaravel.com/?page=2

// Nhận URL đầy đủ cho yêu cầu trước đó

echo url()->previous();

Ngoài cách sử dụng trên bạn cũng có thể sử dụng URL facade:

use Illuminate\Support\Facades\URL;

echo URL::current();

URLs cho các Route được đặt tên (Route name)

Các bạn có thể đọc thêm về Route Name tại đây: Bài 4: Tìm hiểu Route trong Laravel

route helper có thể được sử dụng để tạo URL tới các Route được đặt tên. Các Route đặt tên cho phép bạn tạo URL mà không cần ghi chính xác URL. Do đó, nếu URL của route thay đổi, bạn sẽ không cần phải sửa đổi lại code. Ví dụ: hãy tưởng tượng ứng dụng của bạn chứa một Route được xác định như sau:

Route::get('/post/{post}', function () {
    //
})->name('post.show');

Để tạo URL cho Route này, bạn có thể sử dụng route helper như sau:

echo route('post.show', ['post' => 1]);

// http://example.com/post/1

Bạn cũng có thể truyền nhiều tham số một lúc trong route helper 

Route::get('/post/{post}/comment/{comment}', function () {
    //
})->name('comment.show');

echo route('comment.show', ['post' => 1, 'comment' => 3]);

// http://example.com/post/1/comment/3

URLs gọi tới Controller Actions

Với action helper sẽ giúp bạn gọi tới function trong Controllers. Nó gần giống với các gọi Route theo name ở trên:

$url = action('[email protected]');

Bạn cũng có thể tham chiếu các action với cú pháp mảng "callable":

use App\Http\Controllers\HomeController;

$url = action([HomeController::class, 'index']);

Nếu phương thức trong Controller có tham số truyền vào, bạn có thể chuyển chúng làm đối số thứ hai cho hàm:

$url = action('[email protected]', ['id' => 1]);

Ngoài ra các bạn có thể tham khảo thêm tại đây: https://laravel.com/docs/5.8/urls

Post Comment