En este artículo hablaremos sobre Yii Framework, un framework que hemos utilizado para el desarrollo de aplicaciones FullStack en varios de nuestros proyectos web implementados en PHP. Una de las principales razones para elegir Yii es su curva de aprendizaje muy reducida en comparación con otros frameworks. Esto facilita a los desarrolladores su adopción y uso, lo que permite implementar aplicaciones de manera rápida y eficiente. Además, no presenta grandes requisitos para su instalación en servidores web, lo que hace que la puesta en marcha sea un proceso sencillo.
¿Qué es Yii?
Yii es un framework PHP de alto rendimiento, basado en componentes y diseñado para la creación de aplicaciones web a gran escala. Facilita una alta reutilización del código y acelera significativamente el proceso de desarrollo.
El proyecto Yii comenzó el 1 de enero de 2008, con el objetivo de solucionar algunos problemas presentes en el framework PRADO. Por ejemplo, PRADO se caracteriza por ser lento al manejar páginas complejas, tener una curva de aprendizaje muy pronunciada y contar con varios controles que dificultan la personalización. En cambio, Yii es mucho más fácil y eficiente. En octubre de 2008, después de 10 meses de trabajo en privado, se lanzó la primera versión alfa de Yii. El 3 de diciembre del mismo año, Yii 1.0 fue formalmente presentado.
Versiones de Yii
Actualmente, existen dos versiones principales de Yii: la versión 1.1 y la versión 2.0. Para la versión 1.1, que pertenece a la generación anterior, actualmente solo se ofrece mantenimiento. La versión 2.0 ha sido reescrita completamente y adopta las últimas tecnologías y protocolos, incluidos Composer, PSR, namespaces, traits, entre otros. La versión 2.0 representa la generación actual del framework, y su desarrollo recibirá el principal esfuerzo en los próximos años. Esta guía está basada principalmente en la versión 2.0 del framework.
Yii 1.1
1. Requisitos
Para ejecutar una aplicación desarrollada con Yii, es necesario contar con un servidor web que soporte PHP versión 5.1.0 o superior. Además, los desarrolladores que deseen trabajar con Yii encontrarán beneficioso tener conocimientos en Programación Orientada a Objetos (OOP), ya que este framework está basado completamente en dicho paradigma.
2. ¿Para qué es recomendable usar Yii?
Yii es un framework genérico de desarrollo web, adecuado para crear cualquier tipo de aplicación web. Su bajo consumo de recursos y sus avanzadas funcionalidades de caché lo hacen ideal para aplicaciones de alto tráfico, como portales web, foros, sistemas de gestión de contenidos (CMS), plataformas de comercio electrónico, entre otros.
3. ¿Cómo se compara Yii con otros frameworks?
Yii, al igual que otros frameworks PHP, sigue el patrón de diseño MVC (Modelo-Vista-Controlador). Sin embargo, destaca por su gran eficiencia, su amplia gama de características y su excelente documentación. Desde sus inicios, fue pensado específicamente para el desarrollo de aplicaciones web, a diferencia de otros frameworks que son subproductos de otros proyectos o integran múltiples componentes de terceros. Yii es el resultado de la vasta experiencia de sus creadores en desarrollo web y de un análisis profundo de los frameworks más populares del mercado.
Modelo-Vista-Controlador (Model-View-Controller, MVC)
Yii adopta el patrón de diseño Modelo-Vista-Controlador (MVC), ampliamente utilizado en el desarrollo web. Este patrón tiene como propósito separar la lógica de negocio de los aspectos relacionados con la interfaz de usuario, permitiendo a los desarrolladores modificar cada una de estas partes de manera independiente, sin que una afecte a la otra. En el patrón MVC, el modelo representa los datos y las reglas de negocio, la vista gestiona los elementos de la interfaz, como textos y formularios, mientras que el controlador es el encargado de gestionar la interacción entre el modelo y la vista.
Además de MVC, Yii introduce un front-controller denominado «aplicación», que representa el contexto de ejecución del procesamiento de solicitudes. La aplicación se encarga de recibir las peticiones del usuario y redirigirlas al controlador adecuado para su procesamiento.
El siguiente diagrama ilustra la estructura estática de una aplicación Yii:

Estructura estática de aplicación Yii
Un flujo de tareas típico
El siguiente diagrama muestra un típico flujo de tareas de una aplicación Yii cuando resuelve un pedido de usuario:

- Un usuario realiza un pedido con la siguiente URL: http://www.example.com/index.php?r=post/show&id=1, y el servidor web se encarga de la solicitud mediante la ejecución del script de arranque en index.php.
- El script de entrada crea una instancia de la aplicación y la ejecuta.
- La aplicación obtiene la información detallada del pedido del usuario del componente de aplicación request.
- El controlador determina el controlador y la acción requerida con la ayuda del componente de aplicación llamado urlManager. En este ejemplo, el controlador es post, que se refiere a la clase PostController, y la acción es show, cuyo significado es determinado por el controlador.
- La aplicación crea una instancia del controlador solicitado para resolver el pedido del usuario. El controlador determina que la acción show se refiere al método actionShow en la clase del controlador. Luego, crea y ejecuta los filtros asociados con esta acción (por ejemplo, control de acceso, benchmarking). La acción se ejecuta si los filtros lo permiten.
- La acción lee el modelo Post cuyo ID es 1 desde la base de datos.
- La acción realiza la vista llamada show con el modelo Post.
- La vista lee y muestra los atributos del modelo Post.
- La vista ejecuta algunos widgets.
- El resultado renderizado se inserta en un esquema (layout).
- La acción completa la vista renderizada y se la muestra al usuario.
Yii 2
La versión 2.0 está completamente reescrita y adopta las últimas tecnologías y protocolos, incluidos Composer, PSR, namespaces, traits, entre otros. La versión 2.0 representa la generación actual del framework.
Modelo-Vista-Controlador (Model-View-Controller, MVC)
Yii implementa el patrón de diseño Modelo-Vista-Controlador (MVC), que se refleja en la estructura de directorios utilizada. El directorio models contiene todas las clases del modelo, el directorio views contiene todas las vistas (templates), y el directorio controllers contiene todas las clases de controladores.
El siguiente diagrama muestra la estructura estática de una aplicación.

Cada aplicación tiene un script de entrada web/index.php que es el único script PHP accesible vía web. El script de entrada toma una petición (request) entrante y crea una instancia de una aplicación para manejarla. La aplicación resuelve la petición con la ayuda de sus componentes y la envía al resto de los elementos MVC. Los widgets se utilizan en las vistas para ayudar a construir elementos de interfaz complejos y dinámicos.
Ciclo de Vida de una Petición (Request)
El siguiente diagrama muestra cómo una aplicación maneja una petición:

- Un usuario realiza una petición al script de entrada web/index.php.
- El script de entrada carga la configuración de la aplicación y crea una instancia de la aplicación para manejar la consulta.
- La aplicación resuelve la ruta solicitada con la ayuda del componente request de la aplicación.
- La aplicación crea una instancia de un controlador para manejar la petición.
- El controlador crea una instancia de una acción y ejecuta los filtros de dicha acción.
- Si alguno de los filtros falla, la acción es cancelada.
- Si todos los filtros pasan, la acción es ejecutada.
- La acción carga datos del modelo, posiblemente desde la base de datos.
- La acción renderiza una vista, pasándole los datos del modelo cargado.
- El resultado de la renderización es pasado al componente response de la aplicación.
- El componente response envía el resultado de la renderización al navegador del usuario.
Yii en nuestra compañía
En WATA Factory, hace algunos años desarrollamos una aplicación con Yii 1.1, ya que necesitábamos un framework en PHP que fuera muy rápido de desarrollar. También utilizamos Limesurvey como motor de encuestas, el cual está basado en Yii.