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.

Lógica condicional limpia con el trait Fluent Conditionable de Laravel

#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.

 

Antonio Jenaro

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.

Archivado en:

Fuente: Harris Raftopoulos

Artículos relacionados

Transforma los datos de respuesta HTTP con el método fluent de Laravel
631

Transforma los datos de respuesta HTTP con el método fluent de Laravel

Gestión de atributos anidados con el método set de la clase Fluent de Laravel
600

Gestión de atributos anidados con el método set de la clase Fluent de Laravel

Conversión de objetos Fluent a arrays en Laravel
493

Conversión de objetos Fluent a arrays en Laravel

Inicia la conversación

Hazte miembro de Antonio Jenaro para comenzar a comentar.

Regístrate ahora

¿Ya estás registrado? Inicia sesión