Creación de un paquete para laravel 5.x

Los paquetes de Laravel son una de las formas para añadir funcionalidades a las aplicaciones y mantenerlo todo organizado. Vamos a ver como crear un paquete personalizado para Laravel 5.x

Estructura de carpetas

Lo primero que debemos hacer es poner los nombres de nuestra estructura de directorios: vendor/package-name. Donde package-name es el nombre del paquete y vendor la carpeta contenedora de paquetes. Por ejemplo les llamaremos maiklez/maikblog.

Composer

Desde el terminal usaremos composer para crear el composer.json, que sera donde le indiquemos algunos parametros del paquete y dependencias si las hubiera.

composer init

y nuestro fichero composer.json lo dejariamos tal que así:

{
"name": "maiklez/maikblog",
"description": "modulo de blog para laravel",
"authors": [
{
"name": "Maik.rocks",
"email": "maik.ledzep@gmail.com"
}
],
"minimum-stability": "dev",
"require": {}
}

Para que nuestros paquetes sean visibles a nuestra aplicación, deberemos indicarselo en el propio composer.json de nuestra aplicación. Para ello, en un primer momento y mientras esté en desarrollo, lo tendremos que escribir en el autoload y deberemos tener nuestro paquete dentro de la aplicación que lo este usando. Más adelante podremos subir nuestro paquete a packageist.org y ponerlo como una dependencia más de nuestra aplicación. Pero por ahora, lo escribimos en el autoload.

"autoload": {
"classmap": [
"database"
],
"psr-4": {
"App\\": "app/",
"Maiklez\\MaikBlog\\": "packages/maiklez/maikblog/src"
}
}

y para terminar, deberemos escribir el siguiente comando en el raiz del proyecto para que recargue el al autoload y reserve los nombres.

composer dumpautoload


ServiceProvider

A continuacion deberemos crear el ServiceProvider.

php artisan make:provider MaikBlogServiceProvider

este comando te generará el archivo dentro de app/Providers, lo tendremos que copiar y pegar dentro de nuestro paquete en la careta /src y deberemos cambiar tambien el namespace para que quede dentro de nuestro paquete.

php namespace Maiklez\MaikBlog;
/**
 * 
 * @author maiklez <maik.ledzep@gmail.com>
 */
use Illuminate\Support\ServiceProvider;
use Illuminate\Routing\Router;
class MaikBlogServiceProvider extends ServiceProvider{
/**
* Indicates if loading of the provider is deferred.
*
* @var bool
*/ protected $defer = false; public function boot() { $this->loadViewsFrom(realpath(__DIR__.'/../views'), 'maikblog'); $this->publishes([
realpath(__DIR__.'/../views') => base_path('resources/views/vendor/maikblog'),
]); $this->setupRoutes($this->app->router); // this for conig $this->publishes([ __DIR__.'/config/maikblog.php' => config_path('maikblog.php'),
], 'config'); //this for migrations $this->publishes( __DIR__.'/database/migrations/' => database_path('migrations')
], 'migrations'); //this for css and js $this->publishes([ realpath(__DIR__.'/../assets') => public_path('maiklez/maikblog'),
], 'public'); } /**
* Define the routes for the application.
*
* @param \Illuminate\Routing\Router $router
* @return void
*/
public function setupRoutes(Router $router)
{
$router->group(['namespace' => 'Maiklez\MaikBlog\Http\Controllers'], function($router) { require __DIR__.'/Http/routes.php'; }); } public function register() { $this->registerContact(); config([ 'config/maikblog.php', ]); }
private function registerContact() { $this->app->bind('maikblog',function($app){return new MaikBlog($app); }); } }

Y para terminar, le tendremos que decir a nuestra aplicación donde se encuentra el Provider, y esto se hace en config/app añadiendo la siguiente linea.

Maiklez\MaikBlog\MaikBlogServiceProvider::class

En este archivo le estaremos indicando donde estan las distintos objetos necesarios para el paquete como son los controllers, las views, las routes, assets...

/Maiklez/Maikblog/src/config

El fichero de configuracion lo pondriamos aquí

/Maiklez/Maikblog/src/database/migrations

Las migrations de la aplicación

/Maiklez/Maikblog/src/Http

Aqui estará las rutas

/Maiklez/Maikblog/src/Http/Controllers

Donde tendremos los controllers

/Maiklez/MaikBlog/views

Aqui estarán las vistas

Ahora solo nos quedaría por hacer todo esto y tendriamos nuestro paquete terminado ;)

Deja tu comentario!

Login para comentar