Hilar fino en el manejo de entradas en Laravel: personalización de los middlewares TrimStrings y ConvertEmptyStringsToNull
- Publicado el 08 noviembre, 2024
- Palabras: 289
Laravel, de manera predeterminada, aplica dos middleware globales para normalizar los datos de entrada: TrimStrings y ConvertEmptyStringsToNull. Si bien estos son útiles en general, puede haber situaciones en las que necesite más control sobre este comportamiento. Laravel ofrece formas flexibles de personalizar o deshabilitar estos middleware por completo o para rutas específicas. Exploremos cómo puede ajustar el manejo de entrada en sus aplicaciones Laravel.

#Comprender el comportamiento por defecto
De forma predeterminada, Laravel aplica dos middleware a todas las solicitudes entrantes:
- TrimStrings: elimina los espacios en blanco del principio y el final de las entradas de cadena.
- ConvertEmptyStringsToNull: convierte cadenas vacías en valores nulos.
#Deshabilitar el middleware globalmente
Si deseas deshabilitar estos middleware para todas las solicitudes, puede eliminarlos de la pila de middleware de su aplicación en el archivo bootstrap/app.php:
use IlluminateFoundationHttpMiddlewareConvertEmptyStringsToNull;
use IlluminateFoundationHttpMiddlewareTrimStrings;
->withMiddleware(function (Middleware $middleware) {
$middleware->remove([
ConvertEmptyStringsToNull::class,
TrimStrings::class,
]);
})
#Personalización del comportamiento del middleware
Para un control más granular, puede personalizar cuándo se aplican estos middleware mediante cierres. Esto se hace en el archivo bootstrap/app.php:
->withMiddleware(function (Middleware $middleware) {
$middleware->convertEmptyStringsToNull(except: [
fn (Request $request) => $request->is('admin/*'),
]);
$middleware->trimStrings(except: [
fn (Request $request) => $request->is('admin/*'),
]);
})
En este ejemplo, deshabilitamos ambos middleware para todas las rutas que comienzan con 'admin/'.
#Ejemplo práctico
Consideremos un escenario en el que tiene un editor de texto en su panel de administración y desea conservar los espacios en blanco y las cadenas vacías exactamente como las ingresa el usuario.
A continuación, le mostramos cómo puede implementar esto:
<?php
namespace AppHttpControllers;
use AppModelsPost;
use IlluminateHttpRequest;
class AdminPostController extends Controller
{
public function store(Request $request)
{
$validated = $request->validate([
'title' => 'required|string|max:255',
'content' => 'required|string',
]);
$post = Post::create($validated);
return response()->json($post, 201);
}
}
Con la personalización del middleware que configuramos anteriormente, cuando este controlador recibe una solicitud al punto final /admin/posts, el campo de contenido conservará cualquier espacio inicial o final, y las cadenas vacías permanecerán como cadenas vacías en lugar de convertirse en nulas.
Así es como podrían verse la entrada y la salida:
// POST /admin/posts
// Input
{
"title": " My Formatted Post ",
"content": " This content has significant whitespace.
Including empty lines.
"
}
// Output
{
"id": 1,
"title": " My Formatted Post ",
"content": " This content has significant whitespace.
Including empty lines.
",
"created_at": "2023-06-15T19:30:00.000000Z",
"updated_at": "2023-06-15T19:30:00.000000Z"
}
Observa cómo se conserva el espacio en blanco tanto en el título como en el contenido, lo que no ocurriría con el comportamiento predeterminado del middleware.
Si dominas la personalización del middleware de manejo de entrada de Laravel, puedes crear aplicaciones más flexibles y precisas que manejan la entrada del usuario exactamente como lo requiere tu caso de uso. Ya sea que estés creando interfaces de administración complejas, trabajando con texto formateado o simplemente necesites más control sobre tus datos de entrada, estas técnicas te brindan el poder de ajustar el comportamiento de Laravel a tus necesidades exactas.
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