Una de las ventajas de Laravel es que podemos escribir bibliotecas donde simplemente podemos llamar a sus servicios sin preocuparnos de cómo se implementó. Podemos reutilizar estas bibliotecas y administrarlas por separado del código fuente principal de nuestro proyecto y a estas bibliotecas en Laravel se les llaman paquetes.
Los paquetes son la forma principal de agregar funcionalidad a Laravel.
Existen diferentes tipos de paquetes. Algunos paquetes son independientes, lo que significa que funcionan con cualquier marco PHP. Carbon y Behat son ejemplos de paquetes independientes. Cualquiera de estos paquetes puede usarse con Laravel solicitándolos en su archivo. composer.json
Por otro lado, otros paquetes están destinados específicamente para su uso con Laravel. Estos paquetes pueden tener rutas, controladores, vistas y configuraciones específicamente diseñadas para mejorar una aplicación Laravel. Esta guía cubre principalmente el desarrollo de aquellos paquetes que son específicos de Laravel.
Iniciaremos asumiendo que ya esta funcionando una instalación limpia de Laravel como lo explicamos anteriormente.
Crear directorio del paquete
Sabemos que nuestros paquetes instalados viven dentro del directorio de proveedores y eso se ignora por defecto. Tampoco se supone que modifiquemos el código directamente desde el directorio de proveedores.
Entonces, creemos una carpeta desde el directorio raíz laravel con esta estructura:
aplicación / paquetes / nombre_proveedor / nombre_paquete / src
para esta practica quedaria así:
blog/paquetes/grupoefe/mipaquete/src
Iniciación con composer
Necesitamos iniciar nuestro paquete usando Composer para que el paquete pueda instalarse en Laravel como proveedor más adelante.
Usando la terminal, navegue a la carpeta del paquete en este caso blog/paquetes/grupoefe/mipaquete
, y ejecute el siguiente comando:
composer init
Siga las instrucciones del compositor, si no sabe cómo responder, simplemente presione Intro para usar la respuesta predeterminada.
{ "name": "grupoefe/mipaquete", "description": "Paquete para laravel", "authors": [ { "name": "Angel Figueroa", "email": "afigueroa@grupoefe.net" } ], "require": {} }
Después de la inicialización, debemos editar el archivo composer.json
recién generado para agregar el service provider al autoload, quedando como se muestra a continuación.
{ "name": "grupoefe/mipaquete", "description": "Paquete para laravel", "authors": [ { "name": "Angel Figueroa", "email": "afigueroa@grupoefe.net" } ], "require": {}, "autoload": { "psr-4": { "GrupoEFE\\MiPaquete\\": "src/" } } }
Creamos nuestro Service Provider
Para esto debemos crear un archivo llamado MiPaqueteServiceProvider.php
en la carpeta src
y agregamos el siguiente código.
<?php namespace GrupoEFE\MiPaquete; use Illuminate\Support\ServiceProvider; class MiPaqueteServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { } /** * Bootstrap services. * * @return void */ public function boot() { } }
Ya con esto tenemos lo necesario para el paquete, pera falta hacer que él paquete haga algo.
Función de prueba
Crearemos un archivo routes.php
en el directorio src
de nuestro paquete con el siguiente contenido.
<?php Route::get('/test', function () { return "OK"; });
Agregamos las rutas a la aplicacion registrandolas en service provider, para esto editamos el service provider que creamos debiendo quedar asi.
<?php namespace GrupoEFE\MiPaquete; use Illuminate\Support\ServiceProvider; class MiPaqueteServiceProvider extends ServiceProvider { /** * Register services. * * @return void */ public function register() { $this->loadRoutesFrom(__DIR__.'/routes.php'); } /** * Bootstrap services. * * @return void */ public function boot() { } }
Hasta aquí ya tendríamos un paquete que podríamos publicar en github, bitbucket etc. para que pueda ser agregado desde composer a cualquier otra aplicación.
Probando el paquete
Para saber si todo funciona correctamente, vamos a agregar el paquete a nuestro autoload-dev de la aplicación, esto lo hacemos editando el archivo composer.json de nuestra aplicación y agregando en el autoload-dev nuestro service provider.
"autoload-dev": { "psr-4": { "Tests\\": "tests/", "GrupoEFE\\MiPaquete\\": "paquetes/grupoefe/mipaquete/src/" } },
Agregamos nuestro service provider al archivo app.php
dentro de la carpeta config
.
/* * Package Service Providers... */ GrupoEFE\MiPaquete\MiPaqueteServiceProvider::class,
Ejecute el siguiente comando en la carpeta raíz de la aplicación y listo ya estaría funcionando el paquete.
composer dump-autoload