Laravel Prompts: Casos Prácticos

Laravel Prompts: Casos Prácticos

Crea usuarios de prueba o envia recordatorios usando Laravel Prompts.

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.

Crear un Usuario de Prueba

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 Command
11{
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 crear
19 $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 crear
29 $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 => null
36 }
37 );
38 
39 // Creamos los usuarios
40 $users = User::factory()->count($count)->state([
41 'role' => $role
42 ])->create();
43 
44 // Formateamos los usuarios para mostrarlos
45 $users = $users->map(fn(User $user) => $user->only(['email', 'role']))
46 ->toArray();
47 
48 // Mostramos los resultados
49 $this->info('Usuario(s) creado(s)');
50 $this->table(
51 ['Email', 'Role'],
52 $users
53 );
54 
55 }
56}

Resultado Resultado Caso 1

Enviar Recordatorio por Correo

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 Command
13{
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 recordatorios
21 $eventId = search(
22 label: '¿Cuál es el evento que quiere enviar un recordatorio?',
23 options: function (string $value) {
24 return strlen($value) > 0
25 ? Event::where('name', 'like', "%{$value}%")
26 ->pluck('name', 'id')
27 ->toArray()
28 : [];
29 });
30 
31 // Buscamos el modelo del evento por su ID
32 $event = Event::find($eventId);
33 
34 // Recorremos los asistentes del evento y enviamos un mail de recordatorio
35 // por cada uno
36 // La función withProgressBar hace que se vea una barra de progreso por cada
37 // usuario para una mejor experiencia
38 $this->withProgressBar($event->users, function (User $user) use ($event) {
39 Mail::to($user->email)->send(new ReminderMail($event));
40 });
41 
42 // Mostramos los resultados
43 $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

Resultado Caso 2

Para el correo de prueba, estoy usando Mailtrap Correos

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.

Versión Video

Repositorio en Github

Regístrate para que cada semana aprendas algo nuevo

Tendrás tutoriales, tips, conceptos y puedas convertirte en un artesano de todo el ecosistema Laravel.

Nuevo Curso
Chat en Tiempo Real con Laravel Broadcasting

Revisa los detalles del nuevo curso en desarrollo

App screenshot