Laravel Tutorials

URI Path Components Using Laravel's pathSegments() Method

Published
URI Path Components Using Laravel's pathSegments() Method image

Laravel introduces the pathSegments() method for the Uri class, providing a more elegant approach to accessing and manipulating URI path components. This addition streamlines path segment operations with a clean, collection-based interface.

Working with URL paths in web applications often requires extracting specific segments. Previously, developers needed to manually split the path string and create a collection. Laravel's Uri class now simplifies this process with a dedicated method that returns path components as a ready-to-use collection:

use Illuminate\Support\Facades\Uri;
 
$uri = Uri::of('https://laravel.com/docs/11.x/validation');
 
// Get all path segments as a collection
$segments = $uri->pathSegments(); // ['docs', '11.x', 'validation']
 
// Access specific segments using collection methods
$firstSegment = $uri->pathSegments()->first(); // 'docs'
$lastSegment = $uri->pathSegments()->last(); // 'validation'
$secondSegment = $uri->pathSegments()->get(1); // '11.x'

The readability and convenience improvements are substantial:

// Before: manual string splitting and collection creation
$path = Uri::of('https://laravel.com/docs/11.x/validation')->path();
$segments = collect(explode('/', ltrim($path, '/')));
$firstSegment = $segments->first();
 
// After: clean, fluent approach
$firstSegment = Uri::of('https://laravel.com/docs/11.x/validation')
->pathSegments()
->first();

This method particularly shines when implementing navigation systems or content routing:

class ProductController extends Controller
{
public function catalog(Request $request)
{
$uri = Uri::of($request->url());
$segments = $uri->pathSegments();
 
// Extract category and subcategory from URL
$department = $segments->get(0); // 'shop'
$category = $segments->get(1); // 'electronics'
$subcategory = $segments->get(2); // 'smartphones'
 
// Build navigation tree based on path segments
$navigation = $segments->map(function ($segment, $index) use ($segments) {
$url = '/'.implode('/', $segments->take($index + 1)->all());
return ['label' => ucfirst($segment), 'url' => $url];
});
 
return view('products.catalog', [
'department' => $department,
'category' => $category,
'subcategory' => $subcategory,
'navigation' => $navigation,
]);
}
}

The pathSegments() method creates more maintainable and expressive code when working with URI paths, enhancing readability while reducing boilerplate throughout Laravel applications.

Harris Raftopoulos photo

Senior Software Engineer • Staff & Educator @ Laravel News • Co-organizer @ Laravel Greece Meetup

Sponsored

tinkerwell logo
Tinkerwell

Enjoy coding and debugging in an editor designed for fast feedback and quick iterations. It's like a shell for your application – but with multi-line editing, code completion, and more.

Visit Tinkerwell

The latest

View all →
CPX: The Composer Package Executor for PHP image

CPX: The Composer Package Executor for PHP

Read article
Laravel AI SDK Adds Human-in-the-Loop Tool Approval image

Laravel AI SDK Adds Human-in-the-Loop Tool Approval

Read article
Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals image

Pest 5 Released With Test Impact Analysis, Agent Verification, and Evals

Read article
Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs image

Queue-SQL: Run Mass Deletes and Updates Across Parallel Queue Jobs

Read article
Blade Formatting in Laravel Pint image

Blade Formatting in Laravel Pint

Read article
Inertia DevTools Is Now on the Chrome Web Store image

Inertia DevTools Is Now on the Chrome Web Store

Read article