Frameworks PHP

Cada framework PHP tiene una tarea que hace mejor que nadie.

Creamos, rescatamos y alojamos aplicaciones en todos ellos (y en PHP puro que nunca tuvo framework) con un equipo que lleva veinticinco años escribiendo PHP.

Qué framework encaja con tu proyecto

Responde a dos preguntas. Cada camino termina donde empezaríamos nosotros, y dice cuándo elegiríamos otra cosa.

¿De qué partes?

Un proyecto nuevo

¿Qué es lo más importante?

Un sistema grande en el que varios equipos trabajarán durante años

Por dónde empezaríamos

Symfony

Configuración explícita, un contenedor de inyección de dependencias, versiones con soporte a largo plazo y Doctrine para los datos. La estructura sigue en pie cuando se incorpora el quinto desarrollador.

Considera también Laminas si la empresa ya tiene código en Zend Framework.

Un producto que debe salir pronto, con un equipo pequeño

Por dónde empezaríamos

Laravel

Autenticación, colas, correo, tareas programadas y un ORM expresivo listos para usar, con una sola convención para todo.

Laravel en EGPHP
Una API o un servicio pequeño con una sola tarea

Por dónde empezaríamos

Slim

Enrutamiento, middleware y peticiones PSR-7 estándar, y nada que no hayas pedido. Tú eliges la capa de datos y el contenedor.

Si la API va a crecer hasta ser un producto completo, Laravel o Symfony te ahorran reescribirla más adelante.

Una aplicación pequeña en un servidor modesto

Por dónde empezaríamos

CodeIgniter

Poca huella, poca configuración y una documentación clara. Funciona bien donde los recursos son escasos.

Muchas pantallas de datos, creadas rápidamente a partir de la base de datos

Por dónde empezaríamos

Yii · CakePHP

Yii genera modelos y pantallas CRUD con Gii; CakePHP los genera (bake) a partir de sus convenciones. Ambos convierten un esquema en pantallas funcionales rápidamente.

La mínima sobrecarga del framework en cada petición

Por dónde empezaríamos

Phalcon

El framework es una extensión compilada en C, así que en cada petición se ejecuta muy poco PHP. Necesita esa extensión instalada en el servidor; nosotros la instalamos en los nuestros.

Muchos hostings compartidos no permiten extensiones PHP. Compruébalo antes de elegirlo.

Una aplicación que ya existe

¿Sobre qué está construida?

PHP puro sin framework, o una versión de PHP muy antigua

Por dónde empezaríamos

Primero, el rescate

Primero la dejamos segura y al día, y después decidimos juntos si merece la pena un framework.

Cómo es un rescate
Hecha con un framework, y funciona

Por dónde empezaríamos

Mantener el framework

La actualizamos, la aseguramos y la ampliamos en el framework en el que se escribió. Reescribirla es el último recurso, no el primero.

Hecha con un framework que quieres dejar

Por dónde empezaríamos

Migrar por etapas

La aplicación antigua y la nueva funcionan en paralelo, y las rutas pasan de una a otra de una en una mientras el negocio sigue funcionando.

Cómo es una migración

Lado a lado

Qué es cada framework, en qué destaca y cuándo nos lo pensaríamos dos veces. Ninguno es un error; cada uno es el adecuado para un trabajo distinto.

Comparativa de frameworks PHP
Framework Qué es Capa de datos Destaca en Piénsalo dos veces si
Symfony Framework full-stack y componentes reutilizables Doctrine ORM Sistemas grandes y de larga vida, con versiones de soporte a largo plazo Un sitio pequeño tiene que salir esta semana
Laravel Framework full-stack Eloquent Lanzar un producto rápido, con colas, autenticación y correo integrados Quieres que cada pieza se conecte de forma explícita
CodeIgniter Framework full-stack ligero Query builder y modelos sencillos Poca huella en servidores modestos El proyecto necesita un gran ecosistema de paquetes
Yii Framework full-stack Active Record Pantallas con muchos datos generadas con Gii, y caché Tu equipo no lo conoce; su comunidad es más pequeña
CakePHP Framework full-stack CakePHP ORM Convención sobre configuración, y código generado a partir del esquema La aplicación choca con sus convenciones a cada paso
Laminas Componentes y frameworks MVC y de middleware; el sucesor de Zend Framework laminas-db o Doctrine Sistemas de negocio ya construidos sobre Zend Framework Un proyecto nuevo y pequeño quiere avanzar rápido
Slim Microframework Ninguna integrada: tú eliges APIs y servicios pequeños La aplicación necesita sesiones, formularios y un panel de administración desde el primer día
Phalcon Framework full-stack distribuido como extensión en C Phalcon ORM con PHQL Sobrecarga muy baja por petición Tu hosting no puede instalar extensiones PHP

El propio Laravel está construido sobre varios componentes de Symfony, y la mayoría de estos frameworks comparten los mismos estándares PSR: mover código entre ellos cuesta menos de lo que parece.

PHP antiguo, puesto de nuevo en forma

Código escrito hace años sigue generando ingresos a muchas empresas. Lo dejamos seguro y al día sin apagarlo.

- $id = $_GET['id'];- $r = mysql_query("SELECT * FROM orders WHERE id = $id");- $order = mysql_fetch_assoc($r);+ $stmt = $pdo->prepare('SELECT * FROM orders WHERE id = ?');+ $stmt->execute([(int) $_GET['id']]);+ $order = $stmt->fetch(PDO::FETCH_ASSOC);
Las funciones mysql_ se eliminaron en PHP 7. Este único cambio hace que la página funcione en un PHP actual y, a la vez, cierra una inyección SQL.
  1. Leerla y ponerla en marcha

    Una copia de la aplicación funcionando en un servidor actual, y una lista por escrito de lo que falla.

  2. Pruebas alrededor de lo que funciona

    Pruebas que registran lo que hacen hoy las páginas, para que un cambio que rompa una se detecte al instante.

  3. PHP actualizado por etapas

    Versión a versión, con Rector para los cambios mecánicos y PHPStan para encontrar lo que se le escapó.

  4. La seguridad, primero

    Consultas preparadas, salida escapada, contraseñas con un nuevo hash, y sesiones y subidas de archivos bien protegidas.

  5. Después, si compensa, un framework

    Las funciones nuevas se crean en un framework junto al código antiguo, y las páginas antiguas pasan a él a medida que se modifican.

Pasar de un framework a otro, ruta a ruta

No detenemos el negocio para reescribir. La aplicación antigua y la nueva están detrás de un mismo servidor web, y cada ruta pasa a la nueva cuando su sustituta está lista.

  • /api/orders Aplicación nueva Migrada
  • /account Aplicación nueva Migrada
  • /checkout Aplicación nueva En pruebas
  • /reports Aplicación antigua En espera
  • /admin Aplicación antigua En espera
Una migración de ejemplo, a medio camino.

El cambio es una línea por ruta

# nginx
location /api/orders { proxy_pass http://new; }
location /account    { proxy_pass http://new; }
location /checkout   { proxy_pass http://new; }
location /           { proxy_pass http://old; }

Una ruta que falla vuelve a la aplicación antigua con el mismo cambio de una línea, mientras la corregimos.

Cuéntanos qué tienes en marcha

Para empezar basta con el framework, la versión de PHP y lo que te preocupa. Cada proyecto se presupuesta tras una breve conversación.