Laravel VS CodeIgniter

Desarrollar un proyecto personal o comercial trae muchísimos desafíos, todos los proyectos requieren de ciertas características comunes como lo son el manejo de rutas, acceso a la base de datos, organización de la estructura del proyecto, seguridad, etc. Además de esto cada sistema tiene características y lógica propias del sistema (lo que llaman capa de dominio o lógica de negocios), por ejemplo si estás creando un sistema de facturación, además de preocuparte por cómo validar números enteros o direcciones de emails, también debes preocuparte por temas legales como impuestos, etcétera.

Es por lo anterior que usamos frameworks, porque nos ayudan a cubrir estas características comunes, de manera de poder usar el tiempo extra para enfocarnos en la lógica de nuestra propia aplicación, en vez de perderlo aprendiendo cómo acceder a la base de datos o enviar un email con PHP. Además los frameworks tienen comunidad, documentación, son probados por decenas de miles de usuarios, y contienen cientos de pruebas automatizadas, etc. y esto nos da una mayor tranquilidad para implementar en producción versus esa clase de validación que creamos en un par de horas y nadie nunca ha usado o probado.

Por lo tanto un framework debería ser una parte fundamental e indispensable para tu desarrollo si quieres crear aplicaciones realmente modernas y ser eficiente, y es por ello que es muy importante:

Elegir el Framework adecuado

Es decir que tenga un desarrollo y una comunidad activa, que posea buena documentación, que cumpla con estándares, buenas prácticas de desarrollo, uso de tecnologías modernas del lenguaje y del ecosistema etc. y además que sea fácil y divertido de usar.

En cuanto a facilidad puedo decir que Laravel y Codeigniter son muy fáciles de aprender a usar, pero hay importantes diferencias:

Por qué no debes usar CodeIgniter

CodeIgniter tiene una serie de carencias que ya no son justificables en el 2016, y aunque sus nuevas versiones resuelven algunos de estos problemas aún está muy lejos de lo que debería ser un framework de PHP en este año 2016 y de los estándares y características que poseen frameworks como Laravel y Symfony.

Instalación de CodeIgniter vs Laravel

El argumento más repetido que escucho entre quienes aún defienden a CodeIgniter es que es mucho más fácil de instalar que Laravel, porque sólo descargas un .zip lo descomprimes en una carpeta y listo ¿Quien necesita un manejador de dependencias como Composer, cierto? Laravel por el contrario tiene 2 repositorios laravel/framework y laravel/laravel. El primero es el núcleo del framework (todo el framework como tal con sus clases, libraries, pruebas, etc.) Mientras que el segundo es el proyecto base. Para que el proyecto base funcione necesitas descargas todas sus dependencias a través de Composer y así cada vez que alguien instale o quiera actualizar el proyecto. Con CodeIgniter el framework y el proyecto base son lo mismo. La única diferencia es que el framework se encuentra en la carpeta system/ (lo que más o menos en Laravel podría ser la carpeta vendor/).

Ahora bien mucha gente dice que descargar el archivo, descomprimirlo en una carpeta y mover la carpeta a tu directorio de proyectos es una instalación más sencilla, con Laravel por el contrario, la instalación es abrir la consola y escribir esto:

cd Projects/
laravel new my-new-project
#o la alternativa: composer new-project laravel/laravel my-new-project

Por supuesto antes debes instalar Composer y/o el instalador de Laravel, pero esto sólo tienes que hacerlo una vez.

Ahora aunque el comando te parezca por alguna razón más complicado, ¿Qué pasa si hay una vulnerabilidad en CodeIgniter o en Laravel y debes actualizar el framework?

En CodeIgniter debes descargar la nueva versión del framework, descomprimir la carpeta, copiar la carpeta system/ irte a la carpeta de tu proyecto, borrar la carpeta system/ actual, pegar la nueva carpeta, revisar que todo haya quedado bien… En Laravel:

cd my-new-project
composer update

Todas las dependencias no sólo de Laravel sino de todos los paquetes de terceros que tu proyecto esté utilizando serán actualizadas automáticamente y podrás ver una confirmación visual en la consola sobre qué versión de Laravel y de cada paquete estás usando. También podrás ver si ocurrió un error o hay un conflicto de versiones.

La instalación de CodeIgniter que te da ilusión de ahorrar tiempo, en realidad terminará haciéndote perder mucho más en actualizaciones o terminarás trabajando con un proyecto inseguro.

Recuerda que los frameworks son desarrollados por personas que cometen errores y es importante que mantengas tu proyecto actualizado.

PSR-2, PSR-4, Namespaces, y estándares en general

Por lo que puedo ver en GitHub, el código de CodeIgniter 3 no cumple con el patrón de organización de código PSR-2, ni tampoco con PSR-4, de hecho las clases no tienen namespaces, dado que CodeIgniter 3 soporta PHP 5.2 o superior. Ahora este es otro de los puntos donde algunos argumentas: «oh entonces es mejor porque CI soporta más versiones de PHP que Laravel (que requiere en su versión actual al menos PHP 5.5) y esto también es una mentira. Recuerda: los programadores cometemos errores, dejamos problemas de seguridad en el código, etcétera. A ti te conviene que tu proyecto use una versión nueva de PHP que es más segura, contiene más features y si hablamos de PHP 7 es en algunos casos el doble de rápido que PHP 5. ¿Por qué seguir trabajando con una versión de PHP marcada como obsoleta hace mucho tiempo ya?

CodeIgniter 4 al fin soportará nombres de espacio, PSR-4 y requerirá de PHP 7, lo cuál me parece lo más acertado, sin embargo el código no parece soportar aún el estándar de organización PSR-2 y además recuerda que PSR-4 y los nombres de espacios son soportados desde la versión 4 de Laravel. Por decirlo de alguna forma, por usar CodeIgniter has estado varios años atrás de lo que debería ser el desarrollo moderno con PHP.

El ORM de CodeIgniter es muy pobre

Eloquent de Laravel es un gran ORM, con muchísimos features y un desarrollo constante. Si me tocara armar mi propio framework probablemente intentaría usar Doctrine, otro ORM con un enfoque diferente pero muy robusto.

Por otro lado CodeIgniter no tiene un verdadero ORM, lo que tiene parece más un constructor de consultas SQL con interfaz de OOP (aún más sencillo que Fluent en Laravel) que ellos dicen que es una versión “modificada” del patrón de diseño Active Record pero es mentira.

En el patrón Active Record puedes interactuar con las tablas de la base de datos como si se trataran de clases y con las filas como si fueran objetos

Laravel:

$user = new User;
$user->name = ‘Duilio’;
$user->save();

En CodeIgniter:

public function update_entry()
{
    $this->title    = $_POST['title'];
    $this->content  = $_POST['content'];
    $this->date     = time();

    $this->db->update('entries', $this, array('id' => $_POST['id']));
}

El modelo en CodeIgniter 4 parece más completo, sin embargo sigue estando literalmente a años de desarrollo detrás de sus contraparte Eloquent y Doctrine.

Acceder a $_POST de esa forma sin ningún tipo de validación es inseguro.

Comunidad y desarrollo activo

Ambos frameworks tienen una comunidad bastante activa, soporte, etc. Sin embargo a nivel de desarrollo, Laravel tiene casi el triple de colaboradores en GitHub que CodeIgniter 3 (995 vs 392 al momento de escribir este post), de igual forma Laravel tiene más commits y versiones que CodeIgniter. Tampoco hace falta mucho tiempo revisando el código fuente para darse cuenta que la calidad del código de Laravel es muy superior, tiene muchos más features y una cobertura mayor de pruebas automatizadas.

Además encontrarás muchísimos más paquetes para Laravel (que realmente aprovechan el poder de Composer) y muchísimo material para aprender Laravel.

Popularidad

Mientras que ambos frameworks son muy populares, Laravel (en azul) cada vez gana más popularidad mientras que la popularidad de CodeIgniter (en rojo) mengua, y yo imagino que quizás en un futuro pueda existir un framework de PHP que compita contra Laravel pero estoy seguro que no será CodeIgniter 4.

Laravel (azul) vs Codeigniter (rojo) en Google Trends

Laravel (azul) vs Codeigniter (rojo) en Google Trends

Laravel es muy fácil de aprender

El cambio a veces es duro, pero cambio muchas veces significa evolución, y éste es el caso de Laravel. Cuando comiences a entenderlo y a usarlo en tus proyectos te darás cuenta de que no querrás volver atrás, aunque creas en este momento o no las razones expuestas en el post.

¿Usabas CodeIgniter y te cambiaste a Laravel? Por favor cuéntale a la comunidad en los comentarios cómo te fue.

Material relacionado

Regístrate hoy en Styde y obtén acceso a todo nuestro contenido.