Crear un comando para Artisan

Seguramente ya conoces Artisan y sus comandos. Laravel nos permite crear nuestros propios comandos para Artisan.

Vamos a empezar con un simple ejemplo que muestre un sencillo mensaje.

Requisitos

  • Se recomienda tener conocimientos básicos de Artisan.

Crear un comando Artisan

Para crear un nuevo comando el primer paso es empezar con Artisan:

php artisan make:console MostrarMensaje

Esto nos creará la clase MostrarMensaje en app/Console:

namespace App\Console\Commands;

use Illuminate\Console\Command;

class MostrarMensaje extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'command:name';

    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Command description';

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
    public function handle()
    {
        //
    }
}

El método handle será el que se ejecutará cuando ejecutemos el comando. Dado que lo único que va a hacer nuestro comando es mostrar un mensaje vamos a modificar este método:

    public function handle()
    {
        echo "Hola Artisan\n";
    }

También tenemos que cambiar la propiedad:

protected $signature = 'command:name';

En este caso podemos cambiarlo por, por ejemplo:

protected $signature = 'mostrar:mensaje';

Y podremos ejecutarlo así:

php artisan mostrar:mensaje

Pero, ojo, todavía no va a funcionar porque aún no hemos registrado el comando. Si lo probásemos ahora veríamos el mensaje:

[Symfony\Component\Console\Exception\CommandNotFoundException]  
  There are no commands defined in the "mostrar" namespace.

Registrar comando

Para registrar el comando debemos editar el fichero: app/Console/Kernel.php y modificamos la propiedad $commands para añadir el nuevo comando:

protected $commands = [
   Commands\MostrarMensaje::class,
;

Y con esto ya está listo, ya podemos usar el nuevo comando:

php artisan chapters:publish

que mostrará el mensaje:

Hola Artisan

Lista de comandos

El nuevo comando ahora aparecerá al listar los comandos disponibles en Artisan:

php artisan list

¿Qué podemos hacer con un comando Artisan?

Podemos hacer casi cualquier cosa. Dentro de un comando podemos acceder a todas las clases y modelos de Laravel como si fuera un controlador.

Por ejemplo, en Gulvi tengo un comando que se ejecuta cada hora para comprobar qué artículos hay que publicar, enviarme un email con la lista de artículos publicados y enviar un aviso a Twitter y Facebook.

Planificar tareas

Otra cosa muy interesante que podemos hacer con los comandos es ejecutarlos regularmente como un cron. En otra entrega voy a explicar cómo planificar tareas con Laravel.

Autor:
Nivel: Intermedio
Palabras clave:
Fecha publicado:
Fecha actualizado: 19-08-2016

Otros capítulos de la misma serie

Este capítulo es parte de la serie: Laravel pearls.

Y muchos más en preparación.

Disponible en los planes: Laravel hero