¿Qué son los paquetes de Laravel?

Como desarrollador de PHP, es posible que estés interesado en trabajar con frameworks. Los frameworks hacen que el proceso de desarrollo sea más sencillo mediante la simplificación de prácticas comunes que se utilizan en la mayoría de los proyectos de desarrollo de web, tales como paquetes, módulos, plug-ins e incluso los componentes (CakePHP).

Tal vez durante el proceso de desarrollo, sientas que estás reinventando la rueda, como por ejemplo al crear una solicitud de autenticación o un captcha. En este caso, es necesario crear un paquete que lo simplifique todo y haga que el desarrollo de tu app sea más rápido y más sencillo.

Hay dos tipos de paquetes; algunos son independientes (stand-alone) y otros son para un framework específico. En este tutorial veremos exclusivamente los paquetes de Laravel.

Antes de crear un paquete, necesita saber algo sobre los gestores de paquetes. PEAR es un gestor de paquetes de PHP muy popular que, aunque está disponible, rara vez se utiliza. ¿Por qué? Te obliga a instalar paquetes de todo el sistema, en lugar de sobre una base del proyecto. Composer, claramente, se ha convertido en el sucesor de PEAR.

¿Qué son los paquetes de Laravel?

Uno de los características para escalar la potencia del framework se basa en cómo el desarrollador redistribuye los paquetes útiles de código. Esto permite a los desarrolladores resumir aplicaciones en varios paquetes de aplicaciones más pequeñas.

De hecho, los paquetes son un gran método de agrupar código relacionado. Los paquetes son muy similares a los "componentes". Es importante tener en cuenta que el código fuente de Laravel es un "paquete", que Taylor Otwell llama como el DEFAULT_BUNDLE.

Una gran ventaja de los paquetes laravel es que te permiten el acceso a todas las características que el framework ofrece a su aplicación host, incluyendo el enrutamiento, migraciones, pruebas, vistas, y muchas otras funciones útiles. Otra ventaja importante de un paquete es el principio DRY (Do not Repeat Yourself). Crear un paquete de un código que utilices con frecuencia, ayuda a ahorrar recursos y a mejorar el rendimiento de la aplicación.

Ahora vamos a ver algunos paquetes útiles de Laravel. Los paquetes que suelo utilizar son:

Generators: Una de las cosas que me gustó de CakePHP fue su característica Bake. Esto es lo más parecido que he encontrado en cualquier otro framework.
Ardent: Auto-validación de modelos inteligentes para Eloquent.
IDE helper: Este paquete tiene por objeto corregir el problema de auto-completado de código en PhpStorm mediante la creación de un bloque de ayuda de la que el IDE puede tomar señas.
Sayakb: Brinda una gran app de captcha.
Behat: Una solución para probar la aplicación utilizando la metodología de BDD.
Artdarek: Una gran wrapper de OAuth.
Mcamara: Fácil localización i18n para tu aplicación Laravel.

Cómo construir tu propio paquete de Laravel

Vamos a crear un paquete de autenticación muy simple para Laravel 5.0. Para ello, en primer lugar necesitas un archivo composer.json para tu nuevo paquete:

{
    "name": "alireza/myauth",
    "description": "How create your laravel 5 package",
    "license": "MIT",
    "authors": [
        {
            "name": "Alireza Rahmani khalili",
            "email": "[email protected]"
        }
    ],
    "minimum-stability": "dev",
    "require": {
        "laravel/framework": "~5.0"
    },
    "autoload": {
        "psr-4": {
            "Alireza\Authentication\": "src/"
        }
    }
}

La clase Service Provider es simplemente el archivo que lo configura todo correctamente para el paquete. Aquí tienes como el Service Provider debe ser en este punto, en src/MyAuthServiceProvider.php:

namespace AlirezaAuthentication;
use IlluminateSupportServiceProvider;
 
 
class MyAuthServiceProvider extends ServiceProvider {
 
    /**
     * Indicates if loading of the provider is deferred.
     *
     * @var bool
     */
    protected $defer = false;
 
    /**
     * Bootstrap the application events.
     *
     * @return void
     */
    public function boot()
    {
    }
    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {
 
    }
    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return [];
    }
 
}

Añadir el service provider a config/app.php:

'AlirezaAuthenticationMyAuthServiceProvider ::class',

Ahora Laravel es consciente del paquete. Puedes preguntar acerca del "alias" y porqué no, añadirlo a mi app.php. Personalmente, agrego alias al método de registro de la clase Service Provider en lugar de añadirlo manualmente al archivo de configuración de Laravel. Hablaré de esto más adelante. Ahora crea una clase de PHP llamada MyAuth en src/MyAuth.php:

namespace AlirezaAuthentication;
 
use Config, Request, Session, Hash;
use AppUser;
 
Class MyAuth
{
    public $redirect_login = '/users/home';
    public $redirect_logout = '/users/logout';
    public $login = '/user/login';
    protected $data;
 
    public function __construct()
    {
        if (Request::isMethod('post')) //Get post inputs
            $this->data = array('username' => Input::get('username'), 'password' => Input::get('password'));
    }
 
    public function login($data = false)
    {
        $this->data = $data;
 
        if ($this->data && !is_array($this->data))
            return redirect($this->login)->with('message', 'sorry no array to log-in manually')->send();
 
        if ($this->data && !Session::has('user')) {
            $result = User::Where(['email' => $this->data['username']
            ])
                ->first();
 
            if ($result && Hash::check($this->data['password'], $result->password)) {
                Session::put('user', $result);
                return Redirect($this->redirect_login)->with('message', 'Welcome log-in succeeded ')->send();
            }
            Session::flush();
            return redirect($this->login)->with('message', 'Login Failed, wrong username or password')->send();
        }
    }
 
    public function logout()
    {
        Session::flush();
        return redirect($this->login)->with('message', 'logout succeeded')->send();
    }
 
}

La clase de autenticación debe unirse con la IoC Container de laravel al service provider del paquete. Antes de eso, crea una clase facade que nos permitirá usar métodos de clase sin necesidad de crear nuevas instancias, así como otros beneficios de los cuales hemos hablado antes. Al igual que hemos hecho antes con la clase MyAuth, vamos a crear otros archivo en el directorio facades con nombre MyAuthFacede en src/MyAuthFacade.php:

namespace AlirezaAuthentication;
use IlluminateSupportFacadesFacade;
class MyAuthFacade extends Facade
{
    protected static function getFacadeAccessor()
    {
        return 'MyAuth';
    }
}

Después de esto, lo único que queda es arrancar el paquete. Debería ser algo así como:

public function register()
 {
     $this->app['MyAuth'] = $this->app->share(function($app)
     {
         return new MyAuth;
     });
     $this->app->booting(function()
     {
         $loader = IlluminateFoundationAliasLoader::getInstance();
         $loader->alias('MyAuth', 'AlirezaAuthenticationMyAuthFacade');
     });
 }

Como puedes ver, he unido la clase Myauth al IoC Container. Ahora bien, es un uso fácil de la clase MyAuth:

MyAuth::login(['username'=>'[email protected]','password'=>'test']);

Esto debería generar el mensaje, Welcome log-in succeded. Si lo deseas, ahora puedes registrar el paquete en Packagist.

Fuente: Alireza Rahmani

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP