Giới thiệu

Chào bạn! Trong quá trình phát triển web, đặc biệt là với Laravel, việc lấy các phần của đường dẫn URL có thể cực kỳ hữu ích – từ việc điều hướng (routing), xử lý tham số động cho đến phân tích dữ liệu. Laravel cung cấp một cách rất "Laravel-style" để lấy các segment của URL thông qua lớp Request.

Trong bài viết này, CodeTutHub sẽ hướng dẫn bạn cách lấy các segments trong URL bằng nhiều cách khác nhau, kèm theo ví dụ dễ hiểu và có tính thực tiễn cao và dễ hiểu.

URL Segment là gì?

URL segment là phần của URL được phân tách bằng dấu gạch chéo /. Ví dụ:

shell
https://yourdomain.com/blog/laravel/url-segment

Thì các segments sẽ là:

  • blog (Segment 1)
  • laravel (Segment 2)
  • url-segment (Segment 3)

Cách 1: Dùng Request::segment()

Class Request trong Laravel cung cấp phương thức segment() để lấy một segment cụ thể trong URL.

Cú pháp

php
$request->segment($index);

Ví dụ

Giả sử bạn có URL sau:

shell
https://yourdomain.com/products/electronics/123

Bạn có thể lấy từng phần như sau:

php
use Illuminate\Support\Facades\Request;

$first = Request::segment(1); // products
$second = Request::segment(2); // electronics
$third = Request::segment(3); // 123

Lưu ý: chỉ số bắt đầu từ 1 chứ không phải 0.

Cách 2: Dùng phương thức segments()

Nếu bạn muốn lấy tất cả các segment dưới dạng array, hãy dùng phương thức segments().

Ví dụ

php
use Illuminate\Support\Facades\Request;

$segments = Request::segments();

foreach ($segments as $key => $segment) {
    echo "Segment " . ($key + 1) . ": " . $segment . "<br>";
}

Kết quả với URL https://yourdomain.com/blog/laravel/8 sẽ là:

shell
Segment 1: blog  
Segment 2: laravel  
Segment 3: 8

Mở rộng: Lấy segment trong Controller

Bạn cũng có thể sử dụng các phương thức này ngay trong controller:

php
public function show()
{
    $segment = request()->segment(2); // hoặc Request::segment(2);
    return view('example')->with('segment', $segment);
}

Lấy URL Segment trong blade template

Khi bạn muốn lấy các phần của URL ngay trong file blade (.blade.php), Laravel cũng hỗ trợ rất đơn giản nhờ vào hàm request().

Ví dụ:

php
{{-- Lấy segment đầu tiên của URL --}}
@php
    $segment1 = request()->segment(1);
@endphp

<p>Segment 1: {{ $segment1 }}</p>

Hoặc, nếu bạn muốn kiểm tra điều kiện trong Blade:

php
@if(request()->segment(1) === 'blog')
    <p>Đang ở trang blog!</p>
@endif
  • Bạn có thể dùng request()->segment(n) ngay trong @php, trong điều kiện @if, hoặc để in ra trong {{ }}.
  • Dữ liệu này có thể dùng để hiển thị điều hướng (breadcrumb), đánh dấu menu đang active, hoặc xác định nội dung hiển thị.

⚠️ Các lưu ý quan trọng

  • Chỉ số segment bắt đầu từ 1
  • Có thể dùng trong middleware, controller, view, hoặc service provider
  • Nếu segment không tồn tại, Request::segment() sẽ trả về null

📚 Kết luận

Việc lấy URL segment trong Laravel rất đơn giản, sạch sẽ và cực kỳ hữu dụng. Dù bạn đang xây dựng API, tạo route thân thiện SEO hay xử lý dữ liệu từ URL, Request::segment()segments() là những công cụ không thể thiếu trong túi đồ lập trình Laravel của bạn.

Cảm ơn bạn đã xem bài viết, chúc bạn thành công!