Muchas veces tenemos procesos que hacemos varias veces y lo mejor es automatizarlos o ver la manera de hacerlo eficientemente. Con la buena experiencia que nos dan los componentes de Laravel Prompts podremos crear comandos útiles en nuestro flujo de trabajo.
En este blog usaremos Laravel Prompts, un paquete de PHP lanzado recientemente, para desarrollar algunos casos prácticos que podrías necesitar en tu aplicación.
En ocasiones, es necesario contar con un usuario de prueba para probar alguna funcionalidad en nuestra aplicación. Este comando creará un usuario de prueba y se nos solicitará el rol que necesitamos y la cantidad de usuarios de prueba.
1<?php 2 3namespace App\Console\Commands; 4 5use App\Models\User; 6use Illuminate\Console\Command; 7use function Laravel\Prompts\select; 8use function Laravel\Prompts\text; 9 10class CreateUserCommand extends Command11{12 protected $signature = 'create:user';13 14 protected $description = 'Command description';15 16 public function handle()17 {18 // Solicitamos el rol del usuario que queremos crear19 $role = select(20 label: '¿Cuál será el usuario del rol?',21 options: [22 'Administrador',23 'Suscriptor',24 'Invitado',25 'Regular'26 ]);27 28 // Solicitamos la cantidad de usuarios que queremos crear29 $count = text(30 label: '¿Cuántos usuarios se desea?',31 placeholder: 1,32 default: 1,33 validate: fn(string $value) => match (true) {34 !is_numeric($value) || $value <= 0 => 'El valor tiene que ser un número mayor a 0',35 default => null36 }37 );38 39 // Creamos los usuarios40 $users = User::factory()->count($count)->state([41 'role' => $role42 ])->create();43 44 // Formateamos los usuarios para mostrarlos45 $users = $users->map(fn(User $user) => $user->only(['email', 'role']))46 ->toArray();47 48 // Mostramos los resultados49 $this->info('Usuario(s) creado(s)');50 $this->table(51 ['Email', 'Role'],52 $users53 );54 55 }56}
Resultado
Supongamos que tenemos una aplicación de eventos y queremos enviar un recordatorio a todos los asistentes. Este comando enviará los recordatorios y se nos solicitará el evento el cual queremos elegir para el recordatorio.
1<?php 2 3namespace App\Console\Commands; 4 5use App\Mail\ReminderMail; 6use App\Models\Event; 7use App\Models\User; 8use Illuminate\Console\Command; 9use Illuminate\Support\Facades\Mail;10use function Laravel\Prompts\search;11 12class SendReminderCommand extends Command13{14 protected $signature = 'send:reminder';15 16 protected $description = 'Command description';17 18 public function handle()19 {20 // Seleccionamos el evento del cual vamos a enviar recordatorios21 $eventId = search(22 label: '¿Cuál es el evento que quiere enviar un recordatorio?',23 options: function (string $value) {24 return strlen($value) > 025 ? Event::where('name', 'like', "%{$value}%")26 ->pluck('name', 'id')27 ->toArray()28 : [];29 });30 31 // Buscamos el modelo del evento por su ID32 $event = Event::find($eventId);33 34 // Recorremos los asistentes del evento y enviamos un mail de recordatorio35 // por cada uno36 // La función withProgressBar hace que se vea una barra de progreso por cada37 // usuario para una mejor experiencia38 $this->withProgressBar($event->users, function (User $user) use ($event) {39 Mail::to($user->email)->send(new ReminderMail($event));40 });41 42 // Mostramos los resultados43 $this->newLine();44 $this->info('Se enviaron los recordatorios a los siguientes asistentes');45 $this->table(46 ['Name', 'Email'],47 $event->users->map(fn(User $user) => $user->only(['name', 'email']))48 ->toArray()49 );50 51 }52}
Resultado
Para el correo de prueba, estoy usando Mailtrap
Eso es todo por ahora 😁, ¿qué otros casos prácticos se te vienen a la mente para poder utilizar Laravel Prompts? Aquí te dejo el enlace si quieres conocer todos los componentes que nos brinda Laravel Prompts.
Tendrás tutoriales, tips, conceptos y puedas convertirte en un artesano de todo el ecosistema Laravel.
Revisa los detalles del nuevo curso en desarrollo