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.

Solicitar cotizaciónVer todos los servicios

Cotización sin costo · Respuesta directa por WhatsApp