Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save asantibanez/9915eb96a3058adaac17b7084b809160 to your computer and use it in GitHub Desktop.
Save asantibanez/9915eb96a3058adaac17b7084b809160 to your computer and use it in GitHub Desktop.

Definiendo comandos de consola a través de funciones anónimas en Laravel 5.3


Esta es una traducción de un artículo en inglés por Matt Stauffer. El contenido original puede ser visto en el siguiente [link] (https://mattstauffer.co/blog/defining-console-commands-via-closure-in-laravel-5-3)

Traducido por Andrés Santibáñez


Antes de Laravel 5.3, la definición de comandos de consola Artisan - por ejemplo php artisan sync:dates - requería la definición de una nueva clase para ese comando y registrarla en el Kernel de la Consola. El proceso es simple, pero en ocasiones puede percibirse como mucho trabajo para casos en los que el comando solo será una línea de código.

A partir de Laravel 5.3, podremos notar que existe un nuevo método en el archivo Console/Kernel/php denominado commands() el cual carga un nuevo archivo ubicado en routes/console.php. Este nuevo archivo de “rutas de consola” nos permite definir comandos de consoloa Artisan a través una función anónima en vez de utilizar el proceso “definir una clase y luego registrarla en el Kernel de la consola”. Más fácil y rápido.

Si abrimos routes/console.php veremos el siguiente comando de ejemplo:

Artisan::command('inspire', function () {
    $this->comment(Inspiring::quote());
})->describe('Display an inspiring quote’);

Como se puede observar, ahora tenemos una nueva forma para definir comandos Artisan. Tenemos la firma/nombre del comando (“inspire”), la función responsable (la función anónima) y su descripción (“Display an inpiring quiote”).

¿Qué pasaría si tenemos un parámetro o queremos agregar una dependencia externa? Funciona igual cómo cuando usamos la sintaxis anterior.

Artisan::command('sync:conference {id}', function (JoindIn $joindin) {
    $joindin->syncConference($this->argument('id'));
})->describe('Sync a given conference from JoindIn');

Existe algo más e interesante que es posible realizar con esta nueva definición de comandos Artisan que no es posible con la forma tradiciona: es posible definir los parámetros como argumentos de la función anónima, algo de esperarse y muy utilizado en Laravel.

Artisan::command('sync:conference {id}', function ($id, JoindIn $joindin) {
    $joindin->syncConference($id);
})->describe('Sync a given conference from JoindIn');

Como se puede apreciar, tenemos ahora una forma más simple, conveniente, fluida y compacta para definir comandos Artisan.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment