Contenido

CodeIgniter

7 noviembre, 2007 - 00:03

CodeIgniter es un framework de desarrollo web en PHP. Hace poco lo he estado usando para un par de proyectos muy pequeños, y he sacado algunas conclusiones.

En su sitio web se describe como un framework con:

  • bajo uso de recursos
  • rendimiento excepcional
  • altamente compatible con gran variedad de versiones y configuraciones de PHP
  • y algunas cosas más...

Lo que describe, me creo que es verdad (no me he puesto a hacer pruebas de rendimiento), pero tiene un precio: CodeIgniter sacrifica la facilidad de escribir código en favor de las cualidades anteriormente citadas. Que nadie se espere que CodeIgniter sirva como un Ruby on Rails en versión PHP. Para eso están CakePHP u otros. En lugar de esto, quien lo elija debe hacerlo porque tiene que trabajar en un entorno que realmente (pero de verdad) requiera el rendimiento/compatibilidad descrito arriba.

Nada más empezar a desarrollar la primera aplicación, apareció la primera "cosa extraña" de CodeIgniter: no hay una convención para "layouts", código HTML común a varias páginas y que conforma el esqueleto al que se añade el contenido. Para añadirlos encontré un par de soluciones, ambas basadas en el uso de los hooks que el CodeIgniter provee para alterar el flujo de la ejecución:

Lo siguiente que me extrañó fué no se puede acceder a los argumentos de un GET. CodeIgniter los elimina en nombre de la seguridad o no sé que otra estupidez. Esto me parece un defecto muy gordo y que no se sostiene de ninguna forma, ya que ni siquiera sirve como sacrificio para conseguir rendimiento o algo así. Por el contrario, más bien se gasta más tiempo eliminándolos que no haciéndolo.

En un hilo de los foros oficiales expongo (en inglés) mi punto de vista al respecto del trato de los argumentos GET. En el mismo hilo, un contertulio ofrece una solución al problema, de nuevo apoyada en los "hooks" de CodeIgniter.

Lo siguiente que me encontré fué la ausencia de una implementación de Active Record. Aunque en la documentación se pretende llamar como tal a su biblioteca de acceso a la base de datos, la realidad es bien distinta. CodeIgniter no proporciona una abstracción de la base de datos más allá de la propocionada por bibliotecas tradicionales, tales como ADOdb (y ni eso, porque esta librería ya incorpora Active Record). Ya puede decir la documentación lo que quiera.

Otro detallito es que la base de datos, los modelos, los "helpers" y las bibliotecas varias hay que cargarlas explícitamente cada vez que se vayan a usar, lo cual en un proyecto mediano puede empezar a tocar la moral, y en uno grande no quiero ni pensarlo. También vi que algunas cosas como, por ejemplo, cargar la base de datos en el constructor del modelo, directamente no funcionan. Esto puede hacer que más de uno se tire de los pelos en cuanto el proyecto crezca un poco.

Algún detallito más había, pero los de arriba me parecen los más sobresalientes. Todo lo descrito se debe a que el framework está orientado a tener el máximo rendimiento en la mayor variedad posible de entornos. Todo, excepto lo del GET, que me parece absurdo, pero bueno, por lo menos se puede arreglar.

En definitiva, si realmente tienes unos recursos muy limitados, CodeIgniter es una opción a barajar. En cualquier otro caso, busca otra opción, que hay bastantes disponibles para PHP.

#1.
Escrito el 13 noviembre, 2007 - 17:39 por Anónimo.

Tienes mucha razón pero te comento algo este proyecto me a ayuda mucho y gracias a tús comentarios he podido solucionar varios problemas

AnLuZ

#2.
Escrito el 23 noviembre, 2007 - 17:47 por lite.

aquí tienes una implementación de ActiveRecord, aparte de otros componentes que complementan este framework

#3.
Escrito el 24 noviembre, 2007 - 12:46 por pablo.

@lite: no tiene mala pinta el enlace. Lo leeré con detenimiento.

Muchas gracias

#4.
Escrito el 17 febrero, 2008 - 22:58 por Pablo Aguiar.

Comparto la opionion sobre las limitaciones con el GET y LAYOUTS de codeigniter.
Tambien me llamó la atencion que no dispone de metodos requestAction en el controller, lo que no permite comunicar los controladores entre si (ver $this->requestAction('/users/getUserList') de cakePhp)

#5.
Escrito el 18 febrero, 2008 - 09:56 por Pere.

Genial el thread sobre el _GET, me va muy bien poqué estoy migrando un proyecto antiguo a CI y cuanto menos tenga que reprogramar, mejor. Yo había activado las URLs por parámetros y así ya coje los GETs, pero hace algo muy raro, si paso un parámetro lo ignora pero si paso 2 o más los coje todos, en fin, ahora me leo el enlace.

Pero si fuera un proyecto nuevo y necesitara usar mucha información por get (como en un buscador) usaria lo de pasar los segments a un array.

Las librerias puedes cargarlas automáticamente en application/config/autoload.php.

Yo ahí cargo todas las librerias, helpers y lo que haga falta. Quizá así sí que permita usar la libreria bd en el constructor, no lo he probado.

Saludos!

Pere Picornell

#6.
Escrito el 18 marzo, 2008 - 17:51 por Uni Ring.

Creo que deberias probar codeigniter otra vez porque por lo que leo ha cambiado un poco... Por ejemplo lo del get, que se puede activar desde una opcion o lo de cargar db's en los models que se puede hacer con el get_instance o con autoload.

Aparte, codeigniter hay que interpretarlo com si hablaramos de gentoo, y cakephp com si fuera mandrake. No se si me explico, codeigniter viene con pocsa funcionalidades integradas, pesa poco, és simple y ràpido, però tambien dispone de muchas liberias/helpers que le añaden funcionalidades cuando las necesitas.

A mi me gusta mas tener un 'core' mas simple, limpio y ràpido pudiendo añadirle una a una las funcionalidades que requerirà mi proyecto, ni una mas.

Cakephp en cambio me marea solo verlo, demasiadas cosas que no creo que use nunca y que ofuscan mucho el proceso de aprendizaje con ese framework, aparte de que su documentación és bastante espesa.

No digo que cakephp sea mal framework pero no creo que sea mejor que codeigniter.

Com dijo Bilo, "quiero una lavadora que lave desde un calcetin hasta la ropa sucia de un mes, que consuma el mínimo de agua posible y gratis, no pienso pagar nada."

Publicar nuevo comentario

*
*
The content of this field is kept private and will not be shown publicly.

*

  • Allowed HTML tags: <a> <em> <strong> <cite> <code> <ul> <ol> <li> <dl> <dt> <dd>
  • Lines and paragraphs break automatically.