1 abril, 2025
ViewComposer y Provider en Laravel
¿Quieres mostrar un menú de navegación dinámico con categorías y subcategorías en tu proyecto de Laravel 12? En este tutorial te enseñaré cómo usar un View Composer

Suscríbete a nuestro canal en Youtube
SuscríbirseHola programadores! ¿Quieres mostrar un menú de navegación dinámico con categorías y subcategorías en tu proyecto de Laravel 12? En este tutorial te enseñaré cómo usar un View Composer para resolver este problema de forma elegante y eficiente. ¡Sigue leyendo!
¿Qué es un ViewComposer?
✅ Clase que se ejecuta antes de renderizar una vista
✅ Inyecta datos directamente en la vista
✅ Maneja datos dinámicos (como menús, listados, etc.)
💡 Es perfecto para compartir información entre múltiples vistas sin repetir código.
CASO PRÁCTICO
PROBLEMA:
👉 Mostrar un menú de navegación con categorías y subcategorías en todas las páginas, usando URLs dinámicas .
SOLUCIÓN:
Implementar un View Composer en Laravel 12 para:
- Crear el compositor.
- Registrar en el proveedor de servicios.
- Usar los datos en las vistas.
- Optimizar con caché para mejorar rendimiento.
Pasos Clave
1. CREAR EL VIEW COMPOSER
- Crea una nueva clase en
app/Composers/MenuComposer.php
:
php
namespace App\Composers;
use Illuminate\View\View;
use App\Models\Category;
class MenuComposer {
public function compose(View $view) {
$categories = Category::with('subcategories')->get();
$view->with('categories', $categories);
}
}
2. REGISTRAR EN EL PROVEEDOR DE SERVICIOS
- Abre
app/Providers/AppServiceProvider.php
y registra el compositor en el métodoboot()
:
php
use App\Composers\MenuComposer;
public function boot() {
view()->composer('layouts.navbar', MenuComposer::class);
}
👉 Asegúrate de que la vista (ej: navbar.blade.php
) esté incluida en tus layouts.
3. USAR LOS DATOS EN LA VISTA
- En tu menú (ej:
resources/views/layouts/navbar.blade.php
):
html
<nav>
<ul>
@foreach($categories as $category)
<li>
<a href="{{ route('category.show', $category->id) }}">{{ $category->name }}</a>
@if($category->subcategories->count() > 0)
<ul>
@foreach($category->subcategories as $subcategory)
<li><a href="{{ route('subcategory.show', $subcategory->id) }}">{{ $subcategory->name }}</a></li>
@endforeach
</ul>
@endif
</li>
@endforeach
</ul>
</nav>
📌 Usamos route()
para URLs dinámicas basadas en las rutas definidas en web.php
.
4. OPTIMIZACIÓN CON CACHÉ
- Para evitar consultar la BD en cada request, agrega caché en el compositor:
php
public function compose(View $view) {
$categories = cache()->remember('categories_menu', now()->addMinutes(60), function() {
return Category::with('subcategories')->get();
});
$view->with('categories', $categories);
}
💡 Guarda los datos en caché por 60 minutos. Si hay cambios, usa cache()->forget('categories_menu')
.
¿POR QUÉ USAR VIEW COMPOSERS?
✅ Reutilización de código : Evita repetir consultas en múltiples controladores.
✅ Separación de responsabilidades : Mantén tus vistas limpias y tu lógica en un solo lugar.
✅ Escalabilidad : Ideal para elementos comunes como menús, banners o formularios.
Bonus: Cómo Optimizar Más
- Usa caché con tags para invalidar fácilmente:
php
cache()->tags('menu')->remember('categories', ...);
- Actualiza el caché al crear/editar categorías:
php
cache()->tags('menu')->forget('categories');
¡Suscríbete! 🔔 para más tutoriales de Laravel 12 y desarrollo web.
Leido 3319 veces | 1 usuarios
Código fuente no disponible.