Inicio » Blog »

1 abril, 2025

ViewComposer y Provider en Laravel

#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

ViewComposer y Provider en Laravel

Suscríbete a nuestro canal en Youtube

Suscríbirse

Hola 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:

  1. Crear el compositor.
  2. Registrar en el proveedor de servicios.
  3. Usar los datos en las vistas.
  4. 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étodo boot():

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.

Compartir link del tutorial con tus amigos


Curso de Laravel básico

USD 0.00

Descarga del código fuente

Curso de Laravel básico

Codea Applications

México, Colombia, España, Venezuela, Argentina, Bolivia, Perú