Dominando la ausencia de los campos de entrada en Laravel: missing() y whenMissing()
- Publicado el 13 noviembre, 2024
- Palabras: 199
En el desarrollo web, gestionar los campos de entrada que faltan es tan importante como procesar los que están presentes. Laravel, con su enfoque amigable para desarrolladores, ofrece dos métodos poderosos para gestionar los datos de solicitud faltantes: missing() y whenMissing(). Estos métodos proporcionan una forma clara y expresiva de gestionar escenarios en los que es posible que no se proporcionen ciertas entradas. Exploremos cómo estas características pueden mejorar sus aplicaciones Laravel.

#Entender missing() y whenMissing()
- missing(): este método verifica si una clave dada está ausente en la solicitud.
- whenMissing(): este método ejecuta un clousure si una clave especificada falta en la solicitud, con un segundo closure opcional para cuando la clave está presente.
#Usando missing()
El método missing() es sencillo:
if ($request->missing('name')) {
// The 'name' input is not present in the request
}
#Usando whenMissing()
El método whenMissing() ofrece más flexibilidad:
$request->whenMissing('name', function () {
// This runs when 'name' is missing
}, function () {
// This runs when 'name' is present (optional)
});
#Ejemplo práctico
Consideremos un escenario en el que estamos creando un perfil de usuario. Queremos establecer valores predeterminados para los campos faltantes y realizar diferentes acciones en función de si determinados campos están presentes o no.
A continuación, se muestra cómo podemos implementar esto utilizando missing() y whenMissing():
<?php
namespace AppHttpControllers;
use AppModelsUser;
use IlluminateHttpRequest;
class UserController extends Controller
{
public function createProfile(Request $request)
{
$userData = [];
if ($request->missing('name')) {
$userData['name'] = 'Anonymous User';
} else {
$userData['name'] = $request->name;
}
$request->whenMissing('email',
function () use (&$userData) {
$userData['email'] = 'noemail@example.com';
$userData['email_verified'] = false;
},
function () use (&$userData, $request) {
$userData['email'] = $request->email;
$userData['email_verified'] = true;
}
);
$user = User::create($userData);
$request->whenMissing('bio',
fn() => $user->sendBioReminder(),
fn() => $user->update(['bio' => $request->bio])
);
return response()->json($user, 201);
}
}
En este ejemplo, usamos missing() y whenMissing() para:
- Establecer un nombre predeterminado si falta
- Controlar la presencia o ausencia del correo electrónico, estableciendo un correo electrónico predeterminado y un estado de verificación
- Enviar un recordatorio o actualizar la biografía en función de su presencia
Así es como se verían la entrada y la salida:
// POST /api/users
// Input (minimal)
{
"name": "John Doe"
}
// Output
{
"id": 1,
"name": "John Doe",
"email": "noemail@example.com",
"email_verified": false,
"bio": null,
"created_at": "2023-06-15T17:30:00.000000Z",
"updated_at": "2023-06-15T17:30:00.000000Z"
}
// Input (complete)
{
"name": "Jane Smith",
"email": "jane@example.com",
"bio": "Web developer and coffee enthusiast"
}
// Output
{
"id": 2,
"name": "Jane Smith",
"email": "jane@example.com",
"email_verified": true,
"bio": "Web developer and coffee enthusiast",
"created_at": "2023-06-15T17:35:00.000000Z",
"updated_at": "2023-06-15T17:35:00.000000Z"
}
Al aprovechar missing() y whenMissing(), puede crear un manejo de entradas más sólido y flexible en sus aplicaciones Laravel. Estos métodos se destacan cuando se trabaja con campos opcionales, lo que le permite proporcionar valores predeterminados razonables y realizar acciones condicionales en función de la presencia o ausencia de entradas específicas.
Fuente: Harris Raftopoulos
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión