
Lógica condicional limpia con el trait Fluent Conditionable de Laravel
- Publicado el 27 mayo, 2025
- Palabras: 166
En el mundo del desarrollo web, la legibilidad suele primar sobre la inteligencia. Laravel ha adoptado sistemáticamente esta filosofía al proporcionar abstracciones elegantes que transforman la lógica compleja en código expresivo. La incorporación del atributo "Conditionable" a la clase "Fluent" de Laravel es un ejemplo perfecto de este compromiso con la experiencia del desarrollador.

#Entendiendo el Conditionable Trait
El trailt "Conditionable" te permite ejecutar operaciones condicionalmente en un objeto mediante una interfaz fluida. En lugar de interrumpir la cadena de llamadas a métodos con las tradicionales sentencias if-else, se pueden usar los métodos when() y unless() para crear código que se lee casi como una oración en lenguaje natural.
Comparemos el antes y el después para apreciar la diferencia:
#Antes: Lógica condicional tradicional
$data = Fluent::make([
'name' => 'Michael Nabil',
'developer' => true,
'posts' => 25,
]);
if (auth()->isAdmin()) {
$data = $data->set('role', 'admin');
} else {
$data = $data->forget('posts');
}
#Después: Lógica condicional fluida
$data = Fluent::make([
'name' => 'Michael Nabil',
'developer' => true,
'posts' => 25,
])->when(auth()->isAdmin(), function (Fluent $input) {
return $input->set('role', 'admin');
})->unless(auth()->isAdmin(), function (Fluent $input) {
return $input->forget('posts');
});
El segundo enfoque mantiene el flujo del código sin interrumpir la cadena de operaciones. Se lee de forma natural: "Crea un objeto Fluent con estas propiedades. Si el usuario es administrador, añade el rol de administrador. A menos que sea administrador, elimina el recuento de publicaciones".
#Ejemplo práctico
Veamos cómo el trait Conditionable puede limpiar el código de aplicación real al preparar datos para una respuesta de API:
use Illuminate\Support\Fluent;
class UserResource
{
public function toArray($request)
{
$user = $this->resource;
return Fluent::make([
'id' => $user->id,
'name' => $user->name,
'email' => $user->email,
'joined_at' => $user->created_at->toDateString(),
])
->when($request->user()->can('view-statistics'), function (Fluent $data) use ($user) {
return $data->set('post_count', $user->posts()->count())
->set('comment_count', $user->comments()->count());
})
->when($user->isVerified(), function (Fluent $data) {
return $data->set('verified', true)
->set('verification_date', $user->verified_at->toDateString());
})
->unless($request->includesPersonalData(), function (Fluent $data) {
return $data->forget('email');
})
->toArray();
}
}
Este enfoque le permite crear sus datos de respuesta de forma condicional, en función de permisos, estados de usuario y parámetros de solicitud, todo sin interrumpir el flujo de su código.

Desarrollador backend especializado en PHP y Laravel, con sede en Santander, Cantabria. Más de 15 años de experiencia en el desarrollo de aplicaciones web a medida y en la modernización de código heredado.
Fuente: Harris Raftopoulos
Artículos relacionados
Inicia la conversación
Hazte miembro de Antonio Jenaro para comenzar a comentar.
Regístrate ahora¿Ya estás registrado? Inicia sesión