- ¿Cómo instalo Laratheme en un proyecto Laravel 12?
- Ejecuta `composer require codersfree/laratheme` y publica los archivos de configuración con `php artisan vendor:publish --tag=theme-config` y `php artisan vendor:publish --tag=theme-stubs`. Esto generará `config/theme.php` y las plantillas base en `resources/themes/stubs`.
- ¿Puedo cambiar el tema activo desde el código o solo por configuración?
- El tema activo se define en `config/theme.php` o mediante la variable de entorno `THEME_ACTIVE`. Para cambiarlo dinámicamente, modifica esta configuración en tiempo de ejecución o usa middleware personalizado para ajustarlo según la sesión, usuario o headers de la petición.
- ¿Cómo genero un nuevo tema con el comando `make:theme`?
- Usa `php artisan make:theme nombre-del-tema` para crear una estructura predefinida con vistas en `resources/themes/nombre-del-tema/` y assets en `public/themes/nombre-del-tema/`. Los stubs publicados definen la estructura inicial de archivos como `welcome.blade.php` y `layouts/app.blade.php`.
- ¿Qué versión de Laravel y PHP soporta Laratheme?
- Laratheme es compatible con **Laravel 11 y 12** y requiere **PHP 8.2+**. Aunque el paquete menciona soporte para Laravel 8+, verifica en el repositorio oficial si hay actualizaciones para versiones intermedias como Laravel 10.
- ¿Cómo cargo vistas específicas de un tema en Blade?
- Usa el facade `Theme::view('nombre-vista')` en tus controladores para renderizar vistas del tema activo. Por ejemplo, `return Theme::view('welcome');` cargará `resources/themes/{tema-activo}/welcome.blade.php`. Las vistas deben extender layouts base con `@extends` y `@section`.
- ¿Cómo manejo assets (CSS/JS) específicos por tema?
- Almacena los assets en `public/themes/{nombre-tema}/` y usa `Theme::asset('ruta/archivo.css')` para generar URLs dinámicas. Por ejemplo, `Theme::asset('css/app.css')` devolverá `/themes/{tema-activo}/css/app.css`. Asegúrate de que la estructura coincida con la configuración en `config/theme.php`.
- ¿Puedo integrar Laratheme con Vite o Laravel Mix para gestionar assets?
- No hay integración nativa, pero puedes configurar Vite/Laravel Mix para procesar assets por tema usando rutas dinámicas o plugins personalizados. Por ejemplo, define entradas en `vite.config.js` con rutas basadas en el tema activo o usa `@vite(['resources/themes/' + theme + '/css/app.css'])` en Blade.
- ¿Qué pasa si un tema no existe o falla al cargar?
- Laratheme usa el tema configurado en `THEME_ACTIVE` como activo. Si falla, no hay un fallback automático, pero puedes implementar lógica en el middleware `ThemeMiddleware` para redirigir a un tema por defecto o mostrar un error 404. Revisa la configuración de `paths` en `theme.php` para validar rutas.
- ¿Cómo pruebo que un tema se cargue correctamente en pruebas unitarias?
- Mockea el servicio `ThemeService` o usa `Theme::shouldReceive('view')->andReturnView('test')` en tus pruebas. Para assets, verifica que `Theme::asset()` devuelva la ruta esperada con `assertEquals('/themes/tema-prueba/css/app.css', Theme::asset('css/app.css'))`. Prueba también el cambio de tema con `config(['theme.active' => 'tema-prueba'])`.
- ¿Hay alternativas a Laratheme para temas en Laravel?
- Alternativas incluyen `spatie/laravel-theme` (más enfocado en middleware y vistas), `orchid/platform` (para paneles admin con temas), o soluciones personalizadas con Blade includes y middleware. Laratheme destaca por su comando `make:theme` y soporte nativo para assets, pero evalúa si necesitas features como temas por usuario o integración con Livewire.