artisan-signatures-en-laravel-5-1

Artisan provee una serie de comandos muy útiles al momento de desarrollar aplicaciones con Laravel, puedes crear  elementos como controladores, middelwares, seeders, modelos, etc. y puedes interactuar con ellos al ejecutar una migración, solicitar información de las rutas del sistema etc.

Hoy vamos a ver un poco mas allá de estas funcionalidades y trataremos de construir nuestro propio comando accesible desde la consola. Tranquilos! es mucho mas fácil de lo que parece.

Tal vez les haya ocurrido que en algún proyecto multilenguaje durante la etapa de desarrollo exista la necesidad de cambiar constantemente la configuración manualmente para comprobar que todo vaya bien, y no sé ustedes, pero me parece muy tedioso editar el archivo de configuración a cada momento. Vamos a darle una solución más práctica.

Creando un nuevo comando de artisan 

Para ello, usamos «artisan»

$ php artisan make:console SetlocaLe

Con esto habrás creado tu nuevo comando y puedes verlos en

app\Console\Commands\SetLocale.php

Signature

Para cambiar el nombre con el cual vamos a ejecutar este comando en la consola editamos lo siguiente dentro del archivo SetLocale.php usando el atributo «signature», es en este lugar donde vamos a definir la forma en como el usuario podrá ejecutar el comando enviando los parámetros requeridos para cada tarea.

protected $signature = 'setlocale:lang';

Para ver el comando disponible en la consola debemos registrarlo en app\Console\kernel.php

    protected $commands = [
        \App\Console\Commands\Inspire::class,
        \App\Console\Commands\SetLocale::class,
    ];

Ahora si desde la consola ejecutamos

$ php artisan

Podemos ver el nuevo comando listado

artisan-commands-list

Perfecto, vamos a editar un par de cosas, primero necesitamos darle una descripción un poco mas completa. Dentro de SetLocale.php editamos el atributo «description»

    protected $description = 'Change locale language.';

Y agregamos al método handle() las instrucciones que deseamos ejecutar con el comando

    public function handle()
    {
        //ruta al archivo app.php
        $file = config_path().'\app.php';

        //lenguaje actual
        $current_lang = config('app.locale');

        //lenguaje recibido como argumento
        $new_lang = $this->argument('lang');

        //busca la cadena de texto que contiene el lenguaje actual
        $search = "'locale' => '".$current_lang."'";

        //crea una nueva cadena de texto con el lenguaje deseado
        $replace = "'locale' => '".$new_lang."'";

        //remplazamos el nuevo lenguaje por el anterior en app.php
        $contents = str_replace($search, $replace, file_get_contents($file));

        //escribimos el contenido del archivo nuevamente
        file_put_contents($file, $contents);

        //retorna el mensaje a la consola 
        $this->info('locale language has changed to => '.$new_lang);
    }

En este caso el método recibe como parámetro el valor del nuevo lenguaje con

 $new_lang = $this->argument('lang');

Para recibir este parámetro basta con editar el signature indicando el nombre del mismo de la siguiente manera

protected $signature = 'setlocale:lang {lang}';

vamos a ejecutar el comando a ver que sucede

$ php artisan setlocale:lang fr

Puedes editar el valor «en» por cualquiera de los lenguajes disponibles en tu aplicación.

Para verificar que todo funcione correctamente solo debes abrir el archivo config\app.php y podrás ver que ha cambiado el valor de la llave «locale»

'locale' => 'fr',

Recuerda que puedes dejar cualquier duda en la sección de comentarios

Lecturas recomendadas

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.

Lección anterior Manejo de assets con Elixir y Gulp en Laravel 5.1 Lección siguiente Cómo crear y usar los Middleware en Laravel 5.1