Laravel

Aprende Laravel: Artisan

Autorangel cruz
Publicado
Lectura3 min de lectura
Aprende Laravel: Artisan

Vienes usando Artisan desde el primer post de esta serie (php artisan serve, make:controller, migrate). Artisan es la consola de Laravel: un script en la raíz de tu proyecto con decenas de comandos que te ahorran trabajo, y además te deja crear los tuyos. Ahora vamos a mirarla de frente.

Ver los comandos disponibles

Para listar todo lo que Artisan puede hacer:

php artisan list

Y para ver la ayuda de un comando puntual (sus argumentos y opciones):

php artisan help migrate

Los que vas a usar seguido

Ya conociste varios a lo largo de la serie:

  • php artisan serve — levanta el servidor de desarrollo
  • php artisan make:model, make:controller, make:migration — generan clases
  • php artisan migrate — corre las migraciones
  • php artisan route:list — lista todas las rutas de tu app
  • php artisan tinker — un REPL para interactuar con tu app (probar Eloquent, jobs, etc.)
  • php artisan test — corre tus tests

Crear tu propio comando

Cuando tienes una tarea repetible (enviar emails, limpiar datos, un import), la encapsulas en un comando. Se genera con:

php artisan make:command SendEmails

Se crea en app/Console/Commands. Defines el nombre y la firma en $signature, una descripción, y la lógica en handle():

<?php
 
namespace App\Console\Commands;
 
use App\Models\User;
use Illuminate\Console\Command;
 
class SendEmails extends Command
{
    protected $signature = 'mail:send {user}';
 
    protected $description = 'Envía un email de marketing a un usuario';
 
    public function handle(): void
    {
        $user = User::find($this->argument('user'));
 
        $this->info("Enviando email a: {$user->email}");
    }
}

Los comandos en app/Console/Commands se registran solos. Ya puedes correrlo:

php artisan mail:send 1

En Laravel 13 también puedes definir la firma con los atributos #[Signature('mail:send {user}')] y #[Description(...)] sobre la clase, en vez de las propiedades. Ambas formas funcionan.

Argumentos y opciones

En el signature, lo que va entre llaves define la entrada:

// Argumento requerido
'mail:send {user}'
 
// Argumento opcional, o con valor por defecto
'mail:send {user?}'
'mail:send {user=1}'
 
// Opción booleana (switch): true si se pasa --queue
'mail:send {user} {--queue}'
 
// Opción con valor: --queue=default
'mail:send {user} {--queue=}'

Y los lees en handle() con argument() y option():

$userId = $this->argument('user');
$queue  = $this->option('queue');

Entrada y salida por consola

Para mostrar información al usuario, tienes métodos con colores según el tipo:

$this->info('Todo salió bien.');   // verde
$this->error('Algo falló.');       // rojo
$this->line('Texto plano.');
$this->table(['Nombre', 'Email'], $usuarios);

Y para pedir datos de forma interactiva:

$nombre = $this->ask('¿Cómo te llamas?');
 
if ($this->confirm('¿Continuar?')) {
    // ...
}

Siguiente Paso

Ya dominas el desarrollo. El último paso de la serie es sacar tu app del localhost y ponerla en producción. Sigue con Aprende Laravel: Deploy.

Preguntas Frecuentes

¿Qué es Artisan?

La interfaz de línea de comandos de Laravel. Es el script artisan en la raíz de tu proyecto, con comandos para generar código, correr migraciones, listar rutas, testear y mucho más.

¿Cómo creo un comando personalizado?

Con php artisan make:command NombreDelComando. Se genera en app/Console/Commands, defines la firma en $signature y la lógica en handle(). Se registra automáticamente.

¿Cómo le paso datos a un comando?

Con argumentos y opciones en el signature: {user} (argumento), {--queue} (opción). Los lees con $this->argument() y $this->option().

¿Qué es Tinker?

Un REPL (php artisan tinker) que te deja interactuar con tu app desde la consola: probar consultas Eloquent, disparar jobs, inspeccionar modelos, sin escribir una ruta temporal.

Recursos Adicionales