Estado del arte
Actualmente hay un listado bastante extenso de frameworks realizados en PHP. Cada día aparecen nuevos y dejan de usarse otros. Nosotros vamos a ver un pequeño listado de los que más se usan actualmente:
Symfony - http://www.symfony-project.org/
CakePHP - http://cakephp.org/
CodeIgniter - http://codeigniter.com/
Zend framework - http://framework.zend.com/
Kohana - http://kohanaframework.org/
- Laravel - http://laravel.com/
No vamos a analizar cada uno de ellos, pero sí vamos a estudiar qué nos proporcionan tres de los frameworks más utilizados actualmente: **Symfony**, **CodeIgniter**, y **CakePHP**. De forma conjunta nos proporcionan varias funcionalidades como son:
Permiten crear modelos unidos a una fuente de datos, visualizar contenido en vistas y crear controladores que monitorizan las acciones del usuario que actualizan los modelos y las vistas.
Usan una estructura de carpetas que separan el núcleo central del sistema de los componentes de nuestra aplicación.
- Usan ficheros de configuración para ayudarnos a gestionar datos importantes de la aplicación como la localización de la base datos, URLs amigables, sesiones y demás.
Usan un controlador central que captura toda la navegación del usuario. Si el usuario pulsa en un enlace para abrir /libros/ver/3 , se llamará al método ver() del controlador libros, con el ID igual al 3 que pasaremos al modelo para obtener los datos de dicho libro.
Nos permiten extender el núcleo del sistema y construir nuestras propias librerías y helpers.
Y más concretamente ** ¿qué nos ofrece CodeIgniter?**
Curva de de aprendizaje baja: no requiere una gran experiencia en patrones de diseño, tan sólo conceptos básicos de orientación a objetos.
Patrones: tiene implementado por defecto el patrón MVC y Singleton. Respecto al patrón MVC no hay que implementar todas las capas de forma estricta (sólo el controlador y la vista). El modelo es similar al patrón DAO.
Rápido de configurar: tan sólo hay que modificar varios ficheros de configuración y el framework ya estará disponible para escribir nuestra aplicación.
Rápido: es uno de los frameworks más rápidos de todos los utilizados actualmente ya que tiene un núcleo muy sencillo y un bajo acoplamiento entre los componentes del sistema.
Adaptable: es muy fácil de mejorar o adaptar, ya que, proporciona un gran listado de librerías.
Compatible con varios entornos: podemos establecer varios entornos de configuración (desarrollo, pruebas, preproducción, producción, etc.) de forma sencilla.
Se puede integrar con otros frameworks.
Muy buena documentación y una comunidad muy activa.
Muy testeado: debido a que lo desarrolla una empresa y crea aplicaciones con ese framework para sus clientes.
URL amigables: internamente proporciona una serie de librerías para proporcionar "urls amigables" optimizadas para las buscadores.
Validación de formularios: librería de validación de formularios mediante reglas.
Seguridad y filtrado XSS: incorpora una capa de seguridad y funciones para filtrar toda la información que proviene del usuario.
Caché: posibilidad de cachear partes o páginas enteras de nuestra aplicación.
Gestión avanzada de sesiones: reemplaza la sesiones nativas de PHP proporcionando una funcionalidad avanzada para las sesiones.
Benchmarking: podemos visualizar de forma sencilla el consumo de memoria, tiempo de ejecución, etc de cualquier módulo de nuestra aplicación.
Clase para pruebas unitarias: nos proporciona una clase sencilla para crear pruebas unitarias dentro de nuestra aplicación.
Un gran paquete de librerías y helpers.
Pero viendo lo que nos ofrecen otros frameworks como Symfony y CakePHP debemos saber que **NO** nos ofrece CodeIgniter:
- No disponemos de herramientas de líneas de comandos (estilo PEAR) que generen código de forma automática ni código SQL (ORM).
- No genera una estructura básica para operaciones CRUD para facilitar la administración de la aplicación.
- No genera relaciones mágicas (M:M, 1:M,...) entre las tablas de la base de datos.
Aunque gracias a ser un framework tan sencillo estas funcionalidades se pueden añadir como extras dentro del framework de forma sencilla.
Después de analizar que nos ofrece y que no CodeIgniter, entremos de lleno en el estudio del framework.