Crear un paquete de laravel 5.x en español | 100% REAL NO FAKE

Laravel y composer

 

Crear un paquete de laravel 5.x en español | 100% REAL NO FAKE


Bueno este post hasta yo lo estaba esperando, ufff ya que la siguiente información es crucial por que se habla de varios temas que yo creo que mas adelante ire profundizando en diferentes post.

Inicialmente solo voy a indicar como crearlo pero no como subirlo a composer ya que eso sera otro post. Próximamente AQUI(Post En desarrollo)

Asi que partiré desde ese punto de como crear un paquete y publicarlo en composer.

Lo primero obviamente crear una carpeta donde van a estar todos lo del paquete ahora se ejecuta el comando.

composer init





Este comando nos lanza el asistente de composer, en donde primero pide que se ingrese el vendor y el name entonces:
  • vendor ==  Autor
  • name == nombre del paquete
Digo que el vendor el autor pero tambien puede ser cualquier otra cosa como el nombre de la organizacion etc.

Como recomendacion es que el nombre del paquete este sin espacios y en minuscula, el mio quedo asi:

furiosojack/lara-composer


Luego solicita la descripción del paquete asi que escribiré algo como:

Package name (/) [juand/pruebas]: furiosojack/lara-composer   
Description []: Mi primer paquete de laravel


Luego se ingresa el autor del paquete que es el nombre o usuario seguido del correo:

Author [, n to skip]: FuriosoJack <furiosojuan0@gmail.com>


Ahora la minima estabilidad depende de estado donde se encuentre el desarrollo pero eso probablemente en otro post profundice. Por lo general se deja en dev.

Luego el tipo de paquete pues tambien puede variar y se tocara en otro post.Asi que con enter basta ya que por defecto es package.

La licencia pues con las iniciales basta, en la pagina de github estan las mas usadas siendo por lo general de de software libre u opensource.

Ahora pregunta si el paquete tiene dependencias y que si se desea definirlas.

Define your dependencies.

Would you like to define your dependencies (require) interactively [yes]? yes


Obiamente esta parte se indica que si en caso de que nuestro paquete necesite o use otro paquete de composer. yo como ejemploy voy a decir que requiero el paquete lara-exception.

Entonces al indicarle el nombre del paquete compose hace la busquedas de los paquetes con ese nombre y los autores o vendor asi que se vera algo como esto.

Search for a package: lara-exception

Found 1 packages matching lara-exception

   [0] furiosojack/lara-exception

Enter package # to add, or the complete package name if it is not listed:  


Indico el indice del paquete y doy enter.


Ahora me pide la version del paquete que necesito

Enter the version constraint to require (or leave blank to use the latest version):

Si necesito un versión en especifico se le indica o si se require la version mas reciente tan solo con el enter basta.

Bueno ahora pide si necesitamos una dependencia cuando el paquete este en estado de pruebas o que no sea produccion.

Por ahora sera simple el poquete asi que no se añadira nada y por ultimo confirmación de la configuración y se genera un preview del composer.json que se generara.

Would you like to define your dev dependencies (require-dev) interactively [yes]? no            
{
    "name": "furiosojack/lara-composer",
    "description": "Mi primer paquete de laravel",
    "license": "MIT",
    "authors": [
        {
            "name": "FuriosoJack",
            "email": "furiosojuan0@gmail.com"
        }
    ],
    "minimum-stability": "dev",
    "require": {}
}

Do you confirm generation [yes]? yes

Ahora ya generado el composer.json lo voy a editar y añadir unas cosas mas que en el futuro seran de ayuda.

Quedándome de esta forma

{
    "name": "furiosojack/lara-composer",
    "description": "Mi primer paquete de laravel",
    "type": "php",
    "license": "MIT",
    "keywords": ["composer","laravel","key work para la busqueda en github y packageslist"],
    "authors": [
        {
            "name": "FuriosoJack",
            "email": "furiosojuan0@gmail.com"
        }
    ],
 "autoload": {
        "psr-4": {
            "FuriosoJack\\LaraComposer\\": "src"
        }
    }, 
    "require": {
  "php": ">= 5.4
 }
}





Ahora todo queda listo para comenzar los primero es crear una carpeta que se llame src tiene que llamarse asi ya que por convención de composer es mejor usarla con ese nombre, dentro de esta carpeta todo lo que contenga el paquete.

Este paquete a modo de ejemplo solo servirá tener una ruta y un controlador, el controlado solo muestra un mensaje de hola mundo.

Dentro del src creo una carpeta provider y dentro de ella creo el servis provider para este paquete.

Este service provider tiene que extender de la clase ServiceProvider y debe declarar el metodo register.



class LaraExceptionServiceProvider extends ServiceProvider
{
   
    
    
    public function boot()
    {
        
    }
    
    /**
     * Se encarga de registrar los servicio de la aplicacion
     */
    public function register()
    {
        //Registra las rutas y macros         
        $this->loadRoutesFrom(__DIR__.'/../routes.php');
        
        //Registra el servicio para la fachada
        $this->app->bind('laraexception',function(){
            
           //$request = app(\Illuminate\Http\Request::class);
           //return app(ExceptionFather::class,[$request]);
           return new ExceptionFather;
        });
    }    


dentro del método register lo primero es si se quire que el paquete tenga unas rutas entonces de eso se encarga la primera linea, donde indico que en la carpeta raiz de src existe un archivo de routes.php donde estarán declaradas todas las rutas.

Ahora si se quiere registrar una fachada de eso se encarga las siguientes line, es algo como que cada vez que se invoque a laraexception se retorne una instancia de la clase ExceptionFather y ahora falta lo mas importante crear la fachada entonces simplemente yo me creo una carpeta con una fachada llamada  LaraExceptionFacade todas las fachadas deben de extender de Illuminate\Support\Facades\Facade, quedando algo como esto

namespace FuriosoJack\LaraException\Facades;
use Illuminate\Support\Facades\Facade;
/**
 * Description of LaraException
 *
 * @author Juan Diaz - FuriosoJack  
 */
class LaraExceptionFacade extends Facade
{
    /**
     * Se encarga de retorar la fachada registrada en el service provider
     * @return string
     */
    protected static function getFacadeAccessor()
    {
        return 'laraexception';
    }
    
}

Y eso es todo, todo lo de la facha lo maneja la clase ExceptionFather como se indico en el ServiceProvider, la clase se ve algo como esto


class ExceptionFather
{
   
    
    /**
     * Se encarga de generar la excepcion
     * @param string $message
     * @param int $httpCode
     * @param bool $status
     * @param bool $log
     * @throws Exceptions\BasicExceptionJSON
     */
    public function buildEJson(string $message = "", int $httpCode = 200, bool $log = true)
    {        
               
        if($log)
        {
            $this->renderLog($message);
        }
        
        throw new Exceptions\BasicExceptionJSON($message, $httpCode);
    
    }
    /**
     * Se encarga de generar el log
     * @param string $message mensaje que aparecera en el log
     */
    private function renderLog(string $message)
    {
        Log::error(' **************************************** '
                . ''
                . 'Fecha: '. Carbon::now() . '  || '.
                'Mensaje: '. $message                
                );
    } 
 


El ultimo paso es registra el service provider y la facha y eso se hace en el archivo config/app.php

'providers' => [
    FuriosoJack\LaraException\Providers\LaraExceptionServiceProvider::class,
];



y ahora la fachada de la siguiente manera

'aliases' => [
    'LaraException' => FuriosoJack\LaraException\Facades\LaraExceptionFacade::class,
  ],


Aca es donde se le pone un nombre a la fachada y listo ya tiene todos funcionando. Las rutas la fachada en enrealidad es ExceptionFather.

Laravel realmente permite identificar facilmente los patrones de diseño del software y esto es la prueba.


Referencias

  • https://gist.github.com/gradosevic/ccb9f5f96dd3f98b5248
  • https://medium.com/@oscarricardosan/creación-de-paquete-para-laravel-paso-a-paso-2e02b0c1f7a2
  • https://code.tutsplus.com/es/tutorials/how-to-register-use-laravel-service-providers--cms-28966

0 Comentarios