Cómo publicar archivos con Service Provider
Clase 31 de 33 • Curso Avanzado de Laravel
Contenido del curso
Entorno de trabajo y repaso de Laravel
Manejo de tu base de datos con Laravel
La terminal de Laravel
Eventos y tareas de Laravel
Manejo de errores
El corazón de Laravel
Creación de paquetes
- 26

Cómo crear paquetes Laravel con Composer
08:51 min - 27
Propiedades para manejo de dependencias
02:02 min - 28
Comprende el archivo composer.json
02:23 min - 29

Cómo Composer carga clases automáticamente
04:18 min - 30

Crear mis propios Services Providers
08:58 min - 31

Cómo publicar archivos con Service Provider
Viendo ahora - 32

Instalando paquetes desde GitHub con Composer
10:35 min - 33

Publicar tu paquete PHP en Packages
03:12 min
Publicar recursos de un paquete en Laravel es directo cuando se domina el uso del service provider. Aquí verás cómo preparar la publicación de configuración, migraciones y traducciones, y cuándo optar por cargar archivos sin publicarlos. Todo enfocado en acelerar la integración del paquete en una aplicación principal con confianza.
¿Cómo publicar archivos en Laravel con service provider?
Configurar la publicación desde el proveedor de servicios permite exponer a la app principal los archivos del paquete. La idea central: usar el método publishes y el comando vendor publish para mover recursos a sus rutas de destino.
¿Cómo usar el método publishes y el comando vendor publish?
- Define en el método boot qué archivos se publican y hacia dónde van.
- Ejecuta el comando de consola para copiar los recursos.
- Mantén los mapeos claros: origen en el paquete, destino en la app.
Ejemplo base en el service provider:
public function boot(): void { // Publicar configuración. $this->publishes([ __DIR__.'/../config/rating.php' => 'config/rating.php', ], 'config'); }
Ejecuta el comando de publicación:
php artisan vendor:publish
¿Cómo agrupar publicaciones con la tag config?
- Usa un grupo para filtrar lo que se publica.
- Asigna el tag "config" a la configuración.
- Publica solo ese grupo cuando lo necesites.
php artisan vendor:publish --tag=config
¿Cómo evitar duplicar la migración create rating table?
- Verifica si existe la clase de la migración antes de publicarla.
- Si no existe, publícala desde la carpeta del paquete hacia migrations.
- Mantén el nombre coherente: create_rating_table.
public function boot(): void { // ... publicación de config if (! class_exists('CreateRatingTable')) { $this->publishes([ __DIR__.'/../database/migrations/create_rating_table.php' => 'database/migrations/create_rating_table.php', ], 'migrations'); } }
¿Qué recursos se publican: configuración, migraciones y traducciones?
La publicación cubre tres tipos de archivos que suelen acompañar a un paquete.
- Configuración: archivo rating.php en la carpeta config. Archivo expuesto con el grupo "config".
- Migraciones: archivo create_rating_table. Publicado a la carpeta migrations de Laravel.
- Traducciones: se pueden publicar o cargar; útiles cuando el paquete requiere textos multilenguaje.
En el caso descrito, se definió primero la configuración (rating.php) y luego la migración create rating table. Las vistas no están presentes. Las traducciones pueden incorporarse de forma similar si existen.
¿Cómo cargar archivos sin publicarlos con los métodos load?
Además de publicar, existen métodos para cargar recursos directamente en la aplicación, sin copiarlos. Esto acelera el desarrollo cuando no necesitas que los archivos vivan en la app principal.
- Cargar migraciones: útil para ejecutar las tablas del paquete sin exportarlas.
- Cargar traducciones: permite usar idiomas del paquete sin publicar archivos.
- Elegir: publicar para personalizar, cargar para usar tal cual.
Con estas dos opciones —publicar con publishes o cargar con métodos load— puedes decidir la mejor estrategia según el flujo de trabajo. Al cerrar la configuración, el paso siguiente es implementar el paquete en la app principal con tests al 100% y, luego, trabajar con repositories locales para integrarlo de forma ágil.
¿Te gustaría ver un ejemplo más amplio de publicación por grupos o la carga directa de traducciones y migraciones? Deja tus preguntas y casos de uso.