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.
PHP
Laravel
Symfony
CodeIgniter
Yii
CakePHP
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 EGPHPUna 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 rescateHecha 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ónLado 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.
| 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);
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.
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.
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ó.
La seguridad, primero
Consultas preparadas, salida escapada, contraseñas con un nuevo hash, y sesiones y subidas de archivos bien protegidas.
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/ordersAplicación nueva Migrada -
/accountAplicación nueva Migrada -
/checkoutAplicación nueva En pruebas -
/reportsAplicación antigua En espera -
/adminAplicación antigua En espera
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.
Lo que un framework necesita del servidor
Elijas el framework que elijas, esto es lo que su alojamiento tiene que ofrecer.
Entorno de ejecución
- PHP 8.4 sobre PHP-FPMOPcache y JIT están activos, así que los muchos archivos de un framework se compilan una vez y se reutilizan.
- ComposerSoporte completo de Composer: una instalación de producción con autoloader optimizado es un solo comando.
Datos
- Bases de datos relacionalesMySQL, MariaDB y PostgreSQL, instaladas, ajustadas y con copias de seguridad.
- RedisCaché, sesiones y colas en memoria, para las partes de un framework que piden lo mismo una y otra vez.
Trabajo en segundo plano y acceso
- Workers de cola bajo SupervisorLas tareas en segundo plano se ejecutan como procesos supervisados, que se reinician si se detienen y en cada versión.
- Acceso SSHPara despliegues, migraciones y los comandos de consola del framework.
Antes de mover aquí una aplicación de framework
Seis comprobaciones que evitan la mayoría de los lanzamientos fallidos. Abre una para ver por qué importa.
Ajusta la versión de PHP
Lee el requisito php de composer.json y ejecuta composer check-platform-reqs en el destino, para que una extensión que falta aparezca antes del lanzamiento y no durante.
Apunta la raíz web a la carpeta public
Frameworks como Laravel y Symfony solo exponen a la web su carpeta public. Todo lo demás, incluido el archivo de entorno, queda fuera.
Mueve la configuración y los secretos, no el código
Las contraseñas de base de datos y las claves van en ajustes de entorno o en un archivo fuera de la raíz web, nunca en el repositorio.
Comprueba qué debe ser escribible
La caché, los registros y las subidas necesitan una carpeta donde la aplicación pueda escribir, y nada más debe ser escribible.
Reconstruye las cachés en el servidor
Ejecuta los comandos de caché del framework tras cada despliegue, porque las cachés de rutas y de configuración se generan para una máquina y un conjunto de rutas.
Enumera el trabajo en segundo plano
Anota los workers de cola y las tareas programadas que la aplicación espera, para que cada uno tenga un proceso supervisado o una entrada de cron.

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.