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.phpy 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 3496 veces | 1 usuarios
Código fuente no disponible.
 
                         
                 
                 
                 
                 
                             
                             
                             
                            