Crear comandos personalizados para php artisan en Laravel

Los comandos de Artisan son una herramienta de línea de comandos que se incluye en Laravel que son extremadamente útiles para el desarrollo de nuestras aplicaciones en Laravel; su proposito en el desarrollo de software es bastante general y los podemos usar para diversas tareas, como la creación de controladores, componentes, generar modelos, datos de prueba, migraciones de bases de datos, ya sea para crear tablas, o remover las mismas o cambiar las tablas, ejecutar pruebas automatizadas y un largo etc; inclusive, cuando instalamos ciertos paquete para Laravel, pueden agregarse comandos adicionales.

Comandos útiles de artesano

Algunos de los comandos más utilizados son:

  • php artisan make:model: Crea un nuevo modelo.
  • php artisan make:controller: Crea un nuevo controlador.
  • php artisan make:migration: Crea una nueva migración de base de datos.
  • php artisan migrate: Ejecuta las migraciones pendientes.

Con esto, podemos darnos cuenta de lo potente de artisan, en vez de (por ejemplo) crear un archivo, con su clase e importaciones para los modelos, podemos ejecutar un comando en su lugar y con esto generar el archivo correspondiente.

Los que nos lleva al proceso de crear nuestros propios comandos personalizados para Laravel lo cual resulta en un proceso bastante sencillo de realizar; la creación de comandos personalizados es fundamental para realizar cualquier tipo de operación que quieras automatizar mediante un comando, comandos como los de make:controller están a tu disposición para crear cualquier proceso: en esta entrada de manera demostrativa vamos a crear un usuario mediante un comando de artisan personalizado.

Crear la clase para ejecutar nuestros comandos

Tenemos un comando de artisan que nos permite crear el archivo en el cual podremos definir el proceso de nuestro comando, es decir, la lógica: para ello:

php artisan make:command CreateUserCommand

Este comando creará automáticamente un nuevo archivo de comando de Artisan listo para usar en la carpeta de app/Console/Commands el cual como puedes suponer, corresponde a una clase con una estructura que tenemos que seguir.

Generar la lógica de nuestro comando

Ejecutado el comando anterior, generará un archivo que consta de 4 partes:

  1. El constructor de la clase: el la cual podemos inicializar alguna data
  2. La función handle: En la cual definimos la lógica de nuestro comando, en nuestro caso, crear un usuario.
  3. El parámetro signature: Que nos permite definir el comando
  4. El parámetro description: En la cual podemos definir una descripción que aparece en la consola, to describe aquí lo que hace tu comandillo...

Nuestro archivo quedaría así, con el llamado a la clase User, el modelo para crear el usuario:

 <?php
namespace App\Console\Commands;
use App\Models\User;
use Illuminate\Support\Str;
use Illuminate\Console\Command;
class CreateUserCommand extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'user:create';
    /**
     * The console command description.
     *
     * @var string
     */
    protected $description = 'Comando para crear usuarios *-*';
    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }
    /**
     * Execute the console command.
     *
     * @return int
     */
    public function handle()
    {
        User::create([
            'name' => Str::random(8),
            'email' => Str::random(8).'@gmail.com',
            'password' => Str::random(12),
        ]);
        return 0;
    }
}

Si hacemos un:

php artisan list

Veras nuestro hermoso comando:

Comando de artisan personalizado listado
Comando de artisan personalizado listado

Y si lo ejecutamos:

php artisan user:create

En la base de datos veremos el resultado de nuestro usuario creado.

Parámetros opcionales en los comandos

Si quieres que por ejemplo la contraseña sea opcional, basta con indicar un ? en el parámetro en cuestión:

protected $signature = 'user:create {name} {password?}';

Parámetros con nombre

Puede que te interese colocar la opcion de parametros con nombre; es decir en algo como esto:

php artisan --name="andres"

En este caso, podemos agregar para si queremos verificar el usuario o no; en las opciones del parametros tienes que indicar un -- seguido del nombre del parámetro y luego un igual; si tenemos un parámetro verified:

protected $signature = 'user:create {--verified=} {name} {password?}';

A la final, nuestro código que da de la siguiente manera:

   protected $signature = 'user:create {--verified=} {name} {password?}';
   
   
      $name = $this->argument('name');
        $password = $this->argument('password');
        $email_verified_at = $this->option('verified') ? now() : null;
        User::create([
            'name' => $name ?? Str::random(8),
            'email' => Str::random(8).'@gmail.com',
            'password' => bcrypt($password  ??  Str::random(12)),
            'email_verified_at' => $email_verified_at,
        ]);

Conclusiones

Ya con esto, aprendimos a crear comandos de artesano de manera manual y pasarles las opciones de configuración más comunes como serían la de los parámetros, opcionales y con nombre; la creaación de comandos personalizados es una herramienta de lo más util que pudemos usar crear procesos de todo tipo que queramos automatizar; bastante util cuando generamos un proyecto y cuando queremos instalar, en vez de generar los procesos de manera manual, los podemos ejecutar de manera automatizada mediante comandos.

- Andrés Cruz

In english
Andrés Cruz

Desarrollo con Laravel, Django, Flask, CodeIgniter, HTML5, CSS3, MySQL, JavaScript, Vue, Android, iOS, Flutter

Andrés Cruz En Udemy

Acepto recibir anuncios de interes sobre este Blog.