diglactic/laravel-breadcrumbs
Laravel-style breadcrumb generator for modern Laravel apps. Define breadcrumb trails in code, render them with built-in or custom templates, support structured data and route-bound breadcrumbs, with advanced options and troubleshooting docs.
composer require diglactic/laravel-breadcrumbs
routes/breadcrumbs.php:
Breadcrumbs::for('home', fn($trail) => $trail->push('Home', route('home')));
{{ Breadcrumbs::render('home') }}
php artisan vendor:publish --tag=breadcrumbs-config
Create a simple blog hierarchy:
// routes/breadcrumbs.php
Breadcrumbs::for('blog.index', fn($trail) =>
$trail->parent('home')->push('Blog', route('blog.index'))
);
Breadcrumbs::for('posts.show', fn($trail, $post) =>
$trail->parent('blog.index')->push($post->title, route('posts.show', $post))
);
Render in resources/views/posts/show.blade.php:
{{ Breadcrumbs::render('posts.show', $post) }}
Use parent() to chain breadcrumbs logically:
Breadcrumbs::for('products.category', fn($trail, $category) =>
$trail
->parent('products.index')
->push($category->name, route('products.category', $category))
);
Pass Eloquent models or arrays to closures:
Breadcrumbs::for('users.profile', fn($trail, User $user) =>
$trail->parent('users.index')->push($user->name, route('users.profile', $user))
);
Align breadcrumb names with route names to auto-resolve:
// routes/web.php
Route::name('dashboard.analytics')->get('/analytics', ...);
// routes/breadcrumbs.php
Breadcrumbs::for('dashboard.analytics', fn($trail) =>
$trail->parent('dashboard.index')->push('Analytics')
);
Extend breadcrumbs with structured data:
$trail->push('Product', route('products.show', $product), [
'image' => $product->image_url,
'description' => $product->meta_description
]);
Combine with other packages (e.g., Tailwind CSS):
<div class="text-sm text-gray-500">
{{ Breadcrumbs::render('posts.show', $post) }}
</div>
Handle edge cases (e.g., root-level pages):
Breadcrumbs::for('home', fn($trail) =>
$trail->push('Home', route('home'))
);
Breadcrumbs::for('root.page', fn($trail) =>
$trail->parent('home')->push('Root Page')
);
Missing Route Names:
Route::name('route.name')).route() helper with fallback URLs:
$trail->push('Page', route('page') ?? '#');
Circular Dependencies:
parent() calls without termination.if checks or base cases:
if ($category->parent_id) {
$trail->parent('category', $category->parent);
}
View Template Overrides:
'view' => 'partials.breadcrumbs').config/breadcrumbs.php.Structured Data Conflicts:
Breadcrumbs::generate() to debug the collection:
dd(Breadcrumbs::generate('posts.show', $post));
render() match those in for().php artisan view:clear
Custom Views: Publish and modify templates:
php artisan vendor:publish --tag=breadcrumbs-views
Edit resources/views/vendor/breadcrumbs/bootstrap5.blade.php.
Dynamic Parents: Use closures for dynamic parent resolution:
$trail->parent(fn($trail) => $trail->push('Dynamic Parent', '#'));
Middleware Integration: Set default breadcrumbs via middleware:
public function handle($request, Closure $next) {
Breadcrumbs::for('default', fn($trail) => $trail->push('Default', route('home')));
return $next($request);
}
Localization: Use Laravel’s translation system for titles:
$trail->push(__('Home'), route('home'));
'view' => 'partials.breadcrumbs').<script type="application/ld+json"> in the <head>.How can I help you explore Laravel packages today?