Laravel
Qué es un framework y qué aporta Laravel frente a PHP puro
Por Víctor Peña · Publicado el
Hola, ¿cómo están? Hoy vamos a responder una pregunta que suena básica pero que casi nunca se explica bien: qué es un framework, y por qué alguien que ya sabe PHP debería usar uno.
No voy a decirte que Laravel es mejor. Voy a mostrarte el mismo código escrito de las dos formas y que decidas tú.
¡Empecemos!
Qué es un framework, sin metáforas
Un framework es código que ya está escrito para resolver los problemas que tiene toda aplicación web, más un conjunto de reglas sobre dónde va cada cosa.
Toda aplicación web, sin excepción, necesita:
- Decidir qué código ejecutar según la dirección que pidió el usuario
- Leer datos que llegan del navegador y comprobar que sean válidos
- Hablar con una base de datos
- Generar HTML
- Manejar sesiones y usuarios
- Protegerse de ataques conocidos
Puedes escribir todo eso tú. Funciona, y de hecho así se hacía. El problema es que vas a escribirlo otra vez en el siguiente proyecto, y el tuyo va a estar peor probado que el de un framework que usan cientos de miles de personas.
La otra mitad: las reglas
Esta parte se menciona menos y es la que más se agradece con el tiempo.
Un framework no solo te da código: te dice dónde poner el tuyo. En Laravel, los controladores van en app/Http/Controllers, los modelos en app/Models, las vistas en resources/views. Siempre.
Eso significa que cualquier desarrollador con experiencia en Laravel puede abrir tu proyecto y encontrar las cosas sin preguntarte nada. En un proyecto en PHP puro, cada equipo inventa su propia organización, y entenderla toma semanas.
Es exactamente el problema del que hablamos en qué pasa con tu sistema si tu programador se va: un proyecto que sigue convenciones conocidas lo puede continuar mucha gente; uno con una estructura propia, casi nadie.
El mismo código, de las dos formas
Vamos a lo concreto. Una pantalla que lista pacientes con paginación y búsqueda.
En PHP puro
<?php
$pdo = new PDO('mysql:host=localhost;dbname=clinica', $usuario, $clave);
$pagina = isset($_GET['pagina']) ? (int) $_GET['pagina'] : 1;
$porPagina = 15;
$desde = ($pagina - 1) * $porPagina;
$buscar = $_GET['buscar'] ?? '';
if ($buscar !== '') {
$sql = "SELECT * FROM pacientes WHERE nombre LIKE :buscar
ORDER BY apellido LIMIT :desde, :porPagina";
$stmt = $pdo->prepare($sql);
$stmt->bindValue(':buscar', "%$buscar%");
} else {
$sql = "SELECT * FROM pacientes ORDER BY apellido LIMIT :desde, :porPagina";
$stmt = $pdo->prepare($sql);
}
$stmt->bindValue(':desde', $desde, PDO::PARAM_INT);
$stmt->bindValue(':porPagina', $porPagina, PDO::PARAM_INT);
$stmt->execute();
$pacientes = $stmt->fetchAll(PDO::FETCH_ASSOC);
// y ahora cuenta el total para saber cuántas páginas hay...
$total = $pdo->query("SELECT COUNT(*) FROM pacientes")->fetchColumn();
$totalPaginas = ceil($total / $porPagina);
?>
<table>
<?php foreach ($pacientes as $p): ?>
<tr>
<td><?= htmlspecialchars($p['nombre']) ?></td>
<td><?= htmlspecialchars($p['telefono']) ?></td>
</tr>
<?php endforeach; ?>
</table>
<?php for ($i = 1; $i <= $totalPaginas; $i++): ?>
<a href="?pagina=<?= $i ?>&buscar=<?= urlencode($buscar) ?>"><?= $i ?></a>
<?php endfor; ?>
Funciona. Y fíjate en lo que hay que recordar: escapar la salida con htmlspecialchars en cada campo, usar consultas preparadas, calcular el total para la paginación, conservar el término de búsqueda en los enlaces.
Cada una de esas cosas, si se olvida, es un fallo. Y el COUNT(*) que se olvidó del WHERE ya es un error de los que cuesta ver.
En Laravel
public function index(Request $request)
{
$pacientes = Paciente::query()
->when($request->buscar, fn ($q, $v) => $q->where('nombre', 'like', "%{$v}%"))
->orderBy('apellido')
->paginate(15)
->withQueryString();
return view('pacientes.index', compact('pacientes'));
}
<table>
@foreach ($pacientes as $paciente)
<tr>
<td>{{ $paciente->nombre }}</td>
<td>{{ $paciente->telefono }}</td>
</tr>
@endforeach
</table>
{{ $pacientes->links() }}
Lo importante no es que sea más corto. Es lo que ya no puedes olvidar:
{{ }}escapa el HTML automáticamente. No hay forma de olvidarlo.- El constructor de consultas parametriza siempre. No hay inyección SQL posible por descuido.
paginate()calcula el total, el número de páginas y genera los enlaces.withQueryString()conserva la búsqueda al cambiar de página.
El framework no te hace escribir menos: te hace olvidar menos.
Lo que Laravel trae resuelto
Sin instalar nada aparte:
| Necesidad | En PHP puro | En Laravel |
|---|---|---|
| Rutas | $_SERVER['REQUEST_URI'] y condicionales |
Route::get() |
| Base de datos | PDO a mano | Eloquent |
| Estructura de tablas | SQL suelto | Migraciones versionadas |
| Plantillas | PHP mezclado con HTML | Blade |
| Validación | if por cada campo |
Reglas declarativas |
| Usuarios | Todo a mano | Autenticación incluida |
| Correos | mail() y HTML a mano |
Mailables con Blade |
| Tareas pesadas | No hay | Colas |
| Tareas programadas | Líneas en el crontab | Programador propio |
Lo que un framework te cuesta
Para ser honesto, no todo son ventajas.
Hay que aprenderlo. No basta con saber PHP: hay que conocer las convenciones, los nombres y la forma de hacer las cosas del framework. Son semanas, no días.
Es más pesado. Una petición en Laravel carga bastante más código que un archivo PHP suelto. En la práctica casi nunca importa —y hay formas de optimizarlo—, pero es real.
Tienes que aceptar sus reglas. Si quieres organizar el proyecto a tu manera, el framework se te va a poner en contra. Esa es justamente su gracia, pero cuesta al principio.
Dependes de sus versiones. Cuando Laravel saca una versión mayor, tu proyecto tiene que seguirla tarde o temprano.
Cuándo NO usar un framework
Vale la pena decirlo, porque «usa siempre un framework» es un mal consejo.
Un formulario de contacto no necesita Laravel. Un archivo PHP con mail() y validación básica lo resuelve.
Una página informativa tampoco. Si no hay datos ni usuarios, ni siquiera necesitas PHP.
Un script que corre una vez al mes para procesar un archivo: PHP puro, y listo.
La regla que uso: si el proyecto va a tener usuarios, base de datos y más de cinco pantallas, usa un framework. Debajo de eso, probablemente no lo necesites.
Laravel no es el único
Hay varios frameworks de PHP, y todos son opciones válidas:
- Symfony — más flexible y menos opinado. Muy usado en empresas grandes y en Europa. Laravel usa varios de sus componentes por dentro.
- CodeIgniter — mucho más liviano y sencillo, con menos funcionalidades.
- CakePHP y otros — con sus propias comunidades.
Laravel destaca por dos cosas concretas: la documentación, que es de las mejores que existen en cualquier lenguaje, y el ecosistema, que veremos en otro artículo.
Para cerrar
Un framework es código ya escrito más un conjunto de reglas. Lo primero te ahorra tiempo; lo segundo te ahorra problemas que aparecen meses después.
La diferencia real entre PHP puro y Laravel no está en las líneas de código: está en cuántas cosas puedes olvidar sin que pase nada. Escapar el HTML, parametrizar una consulta, conservar los filtros al paginar. En PHP puro son decisiones tuyas cada vez; en Laravel vienen de fábrica.
Si quieres empezar, la primera lección del curso de Laravel está en introducción a Laravel, y son cuarenta lecciones gratuitas hasta desplegar un sistema en producción.
Saludos y éxitos.
Norvic Software
Desarrollamos el software que tu empresa necesita
Somos una fábrica de software en Bolivia. Construimos sistemas a medida y aplicaciones móviles, y llevamos Inteligencia Artificial a las empresas que ya tienen un sistema funcionando.
- Chatbots con Inteligencia Artificial
- Creación de agentes de IA
- Integración de IA en tus sistemas
- Desarrollo de software a medida
- Aplicaciones móviles iOS y Android
- Consultoría y asesoramiento técnico
Cotización sin costo · Respuesta directa por WhatsApp