Integrar la ejecución de comandos directamente desde un controlador es una técnica poderosa en Laravel que permite automatizar tareas programadas a través de endpoints HTTP. Esto abre la puerta a disparar procesos como el envío masivo de correos desde una simple petición a tu API, sin necesidad de ejecutar comandos manualmente en la terminal.
¿Cómo ejecutar un comando Artisan desde un controlador?
El primer paso es crear o utilizar un controlador existente. En este caso se trabaja con un Newsletter Controller [0:25]. Dentro de este controlador se declara un método llamado send, cuya responsabilidad es invocar un comando Artisan desde la aplicación.
La clave está en utilizar la facade Artisan y su método call [0:43]. Este método recibe como parámetro el nombre del comando que deseas ejecutar. Por ejemplo, para llamar al comando de envío de verificación de correo electrónico:
php
use Illuminate\Support\Facades\Artisan;
public function send()
{
Artisan::call('send:email-verification --class');
El método Artisan::call() permite ejecutar cualquier comando registrado en tu aplicación, incluyendo los que hayas creado de forma personalizada. Después de la ejecución, se retorna una respuesta en JSON confirmando que el proceso se completó correctamente.
¿Cómo configurar la ruta para el endpoint?
Una vez listo el controlador, es necesario apuntar una ruta hacia ese método. Dentro del archivo api.php se declara una ruta de tipo POST [1:10]:
Esta ruta responde a peticiones POST en la dirección api/newsletter y ejecuta el método send del controlador.
¿Cómo preparar la base de datos para probar el envío?
El comando utilizado verifica en la base de datos usuarios que se hayan creado hace siete días y que además no hayan verificado su correo electrónico [1:18]. Para simular este escenario es necesario:
Ubicar un registro de usuario en la base de datos.
Colocar el campo email_verified_at en nulo.
Ajustar la fecha de creación a siete días antes de la fecha actual.
Con estos datos preparados, el comando encontrará al usuario y le enviará el correo de verificación.
¿Cómo verificar que el correo fue enviado correctamente?
Desde un cliente HTTP como Postman o Insomnia, se envía una petición POST a la ruta api/newsletter [1:42]. Si la respuesta devuelve un código 200, significa que el proceso se ejecutó sin errores.
Para confirmar que el correo llegó, basta con revisar el servidor SMTP configurado, como Mailtrap [1:52]. Ahí se puede visualizar el correo de verificación recibido.
¿Qué más puedes construir con esta técnica?
Esta misma estrategia de llamar comandos desde controladores se puede aplicar a múltiples escenarios dentro de una API. El reto propuesto consiste en crear dos endpoints adicionales [2:03]:
Uno para calificar usuarios.
Otro para calificar productos.
Ambos deben seguir la misma lógica: un controlador que reciba la petición, ejecute la lógica necesaria y devuelva una respuesta apropiada. Esta práctica refuerza la capacidad de reutilizar comandos Artisan como servicios accesibles desde cualquier parte de tu aplicación, no solo desde la línea de comandos.
¿Ya implementaste tus propios comandos personalizados y los llamaste desde un endpoint? Comparte tu experiencia y las variantes que encontraste en los comentarios.