¿Laravel es programación espagueti?
Hay un comentario que me dejaron que me llamó mucho la atención donde alguien afirma que Laravel es programación espagueti.
Ojo: obviamente no estoy de acuerdo, pero sí quiero hablar un poco del contexto y reconocer que entiendo su punto de vista.
¿Por qué puede parecerlo?
Hasta que leí ese comentario, no me había detenido a pensar lo complejo que puede lucir una vista en Laravel, especialmente para alguien que recién lo está conociendo. Y no solo Laravel: el desarrollo del lado del cliente también se ha vuelto muy complejo, al punto de superar en dificultad al backend en muchos casos.
Por ejemplo, si abrimos una vista típica de Laravel (como una del listado), vemos que tiene de todo:
- Métodos de ayuda (__, session(), etc.)
- Accesos a traducciones __('Translare').
- Directivas Blade (@if, @foreach, @include, @component, etc.)
- Importación de componentes propios o de terceros como Flux. flux:button
- Condicionales y expresiones directamente en PHP.
- Slots y validaciones.
Y los datos que llegan a esas vistas pueden venir del servidor, de la sesión, de cookies, de una API, etc.
Y esto solo en una vista. Así que entiendo que pueda parecer “caótico” si no conoces todo el ecosistema detrás.
No es espagueti, es dinámico
Pero eso no lo convierte en programación espagueti. Lo que Laravel ofrece son herramientas para generar HTML dinámico, igual que hacen otros frameworks como Django, Flask, o incluso Vue en el frontend.
¿Qué sí es programación espagueti?
Este es un ejemplo de “programación espagueti” en PHP puro, y es justo lo que siempre critico. A mí no me gusta trabajar con PHP puro porque es muy fácil desorganizarse, sobre todo si no se siguen convenciones:
<?php
// Esto es una mezcla de lógica de negocio, presentación y acceso a datos,
// todo en un solo archivo y con saltos incontrolados.
// Simulación de una "conexión" a base de datos
function obtener_datos_de_usuario($id) {
// Imagina una consulta SQL aquí
$usuarios = [
1 => ['nombre' => 'Alice', 'email' => 'alice@example.com', 'activo' => true],
2 => ['nombre' => 'Bob', 'email' => 'bob@example.com', 'activo' => false],
3 => ['nombre' => 'Charlie', 'email' => 'charlie@example.com', 'activo' => true],
];
return $usuarios[$id] ?? null;
}
// Lógica de validación improvisada
if (isset($_GET['id'])) {
$userId = (int)$_GET['id'];
if ($userId <= 0) {
echo "<h1>Error: ID de usuario inválido.</h1>";
// Salto incondicional, mala práctica
goto end_of_script;
}
$userData = obtener_datos_de_usuario($userId);
if ($userData) {
echo "<h1>Detalles del Usuario</h1>";
echo "<p><strong>ID:</strong> " . htmlspecialchars($userId) . "</p>";
echo "<p><strong>Nombre:</strong> " . htmlspecialchars($userData['nombre']) . "</p>";
echo "<p><strong>Email:</strong> " . htmlspecialchars($userData['email']) . "</p>";
// Otra condición y más lógica mezclada
if ($userData['activo']) {
echo "<p style='color: green;'><strong>Estado:</strong> Activo</p>";
// Más código aquí si el usuario está activo...
if (isset($_GET['mostrar_mensaje'])) {
echo "<div style='background-color: lightblue; padding: 10px;'>¡Bienvenido de nuevo, " . htmlspecialchars($userData['nombre']) . "!</div>";
}
} else {
echo "<p style='color: red;'><strong>Estado:</strong> Inactivo</p>";
// Más código aquí si el usuario está inactivo...
}
} else {
echo "<h1>Usuario no encontrado.</h1>";
}
} else {
echo "<h1>Por favor, proporciona un ID de usuario en la URL (ej: ?id=1).</h1>";
}
// Etiqueta para el goto
end_of_script:
echo "<hr><p>Fin de la ejecución.</p>";
?>
Aunque podrías aplicar MVC a mano, ¿para qué reinventar la rueda? Si ya existen frameworks como Laravel que te dan estructura, o incluso otros más ligeros como CodeIgniter si Laravel te queda grande, entonces no tiene sentido complicarse.
Problemas y lo que lo hace que sea programación espagueti:
- Lógica de negocio, presentación y acceso a base de datos todo en el mismo archivo.
- SQL metido directamente entre HTML.
- Sin separación de capas ni control de flujo.
- Imposible de mantener.
Laravel sí tiene estructura
En cambio, Laravel sigue el patrón MVC (Modelo-Vista-Controlador), aunque lo adapte a su manera. Puedes traer datos desde:
- Controladores tradicionales.
- Componentes Blade.
- Livewire o cualquier otro stack que uses.
La idea es separar responsabilidades, como cualquier framework serio. Por eso, no es justo llamar espagueti a un código que está organizado por capas y que simplemente aprovecha las características del framework.
Acepto recibir anuncios de interes sobre este Blog.
Hablamos sobre si la programación en Laravel es programación espagueti.
- Andrés Cruz