Porqué me cambié de CodeIgniter a Laravel como framework PHP

Hace años que no escribo. Mi última entrada fue el 6 de diciembre de 2009, y para ser sinceros había dejado este blog totalmente olvidado. Y aquí estoy, escribiendo de nuevo con todas las ganas y esperando compartir todos mis conocimientos y al mismo tiempo aprender de otros – no soy un experto, pero si me gusta ser detallista -.

Bien, actualmente estoy desarrollando un proyecto en PHP, es para mi proyecto de título en la universidad y no  les voy a contar de que trata. Lo que sí les voy a contar es que estoy utilizando como framework Laravel en su versión 4. Aún es una versión beta – beta 5-, pero ya es bastante estable y el RC debería estar saliendo las próximas semanas.

Este proyecto lo partí hace 1 año y medio más o menos, y partí desarrollándolo con CodeIgniter, otro framework PHP. Realicé sólo un avance de un 5% y luego por temas laborales lo dejé en stand-by. Hace unos meses me independicé y retomé nuevamente todo esto, sin antes haberme sumergido en un mar de nuevos conocimientos y tecnologías que no conocía debido al año laboral en un puesto que no tenía mucha relación con lo que me apasiona: web development.

Luego de haber quedado saciado de tanta información que tuve que digerir – es increíble como todo avanza de rápido – intenté volver a retomar mi proyecto con CodeIgniter, pero me percaté que lamentablemente el framework estaba un poco estancado, y no sólo fue mi impresión si no de la mayoría de la comunidad. Al ingresar al foro muchos estaban migrando a Laravel, por lo que decidí seguir la corriente – luego de investigar -. No les voy a mentir, no me fue para nada cómodo acostumbrarme a este framework y muchas veces pensé en quedarme en CodeIgniter, en especial porque ya conocía su funcionamiento y era relativamente simple – para el que nunca ha trabajado con un framework en PHP, CodeIgniter es el indicado  – y fue mi caso -.

Laravel es increíblemente flexible. De por si, el framework está compuesto de muchos componentes bajo el nombre de “Iluminate”. Cada componente es un repositorio distinto y cada vez que algo entra en aprobación debe pasar ciertos unit-testing a través de Travis-CI – integración continua – antes de ser parte del proyecto. Al estar todo sub-dividido en varias “piezas”, Laravel implementa el patrón de diseño  IoC: Inversion of Control, el cual permite eliminar la dependencia – acoplamiento – y es el framework el quien se encarga de llamar dinámicemente a cada componente sólo si lo necesita – inyección de dependencias -. Éste aplica el principio de diseño llamado Principio de Hollywood: no nos llames, nosotros te llamamos.

Antes de partir con Laravel tuve que ver alrededor de 10 video tutoriales y leer varias entradas de blog’s para entender realmente como se hacen las cosas en él. Al inicio era un poco frustrante tener que declarar todas las rutas de tu aplicación, a diferencia de CodeIgniter que tus rutas van relacionadas con las de los métodos de tus controladores. En Laravel tu debes definir las rutas y aunque suene tedioso, es la manera como realmente debe funcionar una aplicación. Laravel a diferencia de CodeIgniter te da una pauta a seguir. No puedes hacer las cosas escribiendo código en cualquier lado, todo tiene su flujo y su lógica. ACTUALIZACIÓN (18/03/2014): en lo anterior estoy equivocado, en Laravel puedes implementar la misma lógica de ruta que utiliza CodeIgniter si lo deseas, osea mapear los métodos de tus controladores directamente como rutas.

Porqué usar Laravel

  1. Incluye un ORM: a diferencia de CodeIgniter, Laravel incluye un ORM integrado. Por lo cual no debes instalar absolutamente nada. Ahora bien, yo no soy muy amigo de los ORM’s, están de moda y todo pero siento que están sobre-explotados. Hay que saber cuando utilizarlos, muchas veces dejan mucho que desear a nivel de rendimiento.
  2. Bundles: existen varios paquetes que extienden a Laravel y te dan funcionalidades increíbles.
  3. Es elegante y aprendes a programar con estilos. No más porquerías de códigos que no se entienden, aprenderás a programar ‘con clase’ y ordenar tu código de manera de que sea lo más re-utilizable posible.
  4. Puedes manejar tu base de datos desde la misma aplicación (vía código) y tener un control de versiones de lo que haces con ella. Esto se llama migrations. Es excelente herramienta, porque puedes manejar todo desde tu IDE, inclusive montar datos en tus tablas, todo desde la misma ventana y vía consola.
  5. Aprovecha de las ventajas de PHP 5.3. A diferencia de CodeIgniter que da soporte a versiones más antiguas haciendo que sea feo programar en él.
  6. Las rutas te permiten tener control de las peticiones. Una misma ruta puede responder de distinto modo a un método GET o POST. A diferencia de CodeIgniter, en Laravel no hay riesgo de que ‘descubran’ una ruta (URL) mientras no la hayas definido.
  7. Cuenta con su propio motor de plantillas HTML.
  8. El framework es actualizable utilizando composer update y listo, nada de descargar un ZIP y estar remplazando.
  9. La comunidad está viva. Todas mis dudas me las responden en menos de 5 minutos en el chat IRC, son todos muy amables.

Cosas que asustan de Laravel (a primera instancia)

  1. Debes acostumbrarte a utilizar la consola para realizar ciertas funciones. Conocerás Composer, el administrador de dependencias de PHP y Artisan el CLI de Laravel.
  2. La curva inicial de aprendizaje puede ser compleja si no has utilizado un framework o no manejas bien el lenguaje.
  3. La documentación no es tan completa como la de CodeIgniter, no hay tantos ejemplos y muchas cosas quedan en el aire.

Laravel simplemente me está haciendo un mejor desarrollador. Con él harás un desarrollo moderno y acorde a estándares. Para los que aún siguen programando en PHP de manera nativa, haciendo includes en todas partes, mezclando HTML con PHP a diestra y siniestra, realizando consultas a la DB en cualquier lugar… háganse un bien y prueben Laravel, o por lo menos partan con CodeIgniter.

Para partir con Laravel en su versión 4, visiten: http://four.laravel.com o sigan el tutorial paso a paso que he creado.

Anuncios

23 comments

  1. Saludos, nikoskip, muy buena explicacion, llevo dias buscando algo como lo que tu planteas, veras mi caso es que estoy desarrollando una aplicaion en CI y casi llevo un 50% de la misma, podrias darme una orientacion de como mudarme a Laravel 4 o en su defecto recomendarme algunos sitios, que tu conozcas que puedan servir de orientacion.

    Gracias de antemano, por lo que puedas hacer por mi!!

    Me gusta

    1. Si tu aplicación es muy grande y el 50% de ésta te llevó mucho trabajo te aconsejo seguir con CI y terminar tu proyecto. Para futuros proyectos o si le quieres dar una probadita a Laravel puedes revisar la guía de instalación que escribí y te recomiendo revisar estos videos tutoriales que son bastante completos y yo por lo menos aprendí mucho de ellos: http://net.tutsplus.com/tutorials/php/laravel-4-mastery/

      Espero haberte ayudado ;)

      Me gusta

      1. Saludos, nikoskip, gracias por los enlaces, la verdad los tutos de nettuts me han ayudado un monton.
        para ser sincero, despues de haber visto unos cuantos tutoriales, senti que me iba a quedar atras si seguia mi proyecto con CI y me propuse mudar todo a laravel 4. No me arrepiento de ello, pues a pesar que ha sido duro, esta quedando mejor que lo que llevaba con codeigniter, y con esto no digo que sea malo el framework, sino que simplemente laravel me encanto despues de conocer bien su forma de trabajar.

        por cierto, deberias realizar mas posts de laravel, ya que la mayoria de la info que esta disponible es en ingles, son contados los sitios en español que hablen sobre laravel.

        Me gusta

      2. Nikoski, tengo una gran interrogante.. que framework usar…estoy muy confundido, por que no se si Laravel (con sus cuestiones de desempeño), CodeIgniter (con su cuestion de la edad) ó Phalcon (con su cuestion de novedad).

        Ciertamente me preocupa mucho la parte de desempeño…

        Me gusta

  2. Me alegro mucho que te hayas decidido a probar y utilizar Laravel, de verdad no te arrepentirás. Y no te preocupes, tengo en mente escribir bastante sobre Laravel, quierace o no, fue él el que me motivo a escribir nuevamente en este blog, debido a que no encontré nada de información en español – hay, pero sólo lo mencionan – y tengo las ganas de que otros también puedan aprender y que el lenguaje no sea una limitante.

    Saludos.

    Me gusta

  3. nikoskip!! eres un genio!! lei todos los articulos q creaste sobre laravel!, me ayudaron mucho, el de autentificacion de usuarios fue muy simple realizarlo gracias a tu post, y de hecho aprenderlo tambien fue sencillo!!, estoy con una aplicacion de seguros, haciendolo en cakephp, pensaba pasar a CI pero empeze a migrar todo a lavarel, me estanque mucho al trabajar con ajax en cakephp, espero q aqui no sea mucho problema!, un abrazo y te animo que sigas publicando mas contenido!!, explicas muy bien!!

    Me gusta

    1. Muchas gracias por tu comentario y que bueno que te han ayudado mis entradas sobre Laravel. Desconozco que tipo de problemas tuviste en CakePHP con las llamadas AJAX, pero en mi caso no he tenido problema alguno con Laravel. Espero que termines tu proyecto y te aseguro que este framework es una muy buena opción.

      Me gusta

  4. Hola Nikoskip, Está excelente tu web. Gracias por toda esta informacion y disposicion, por personas como tu es que vale la pena seguir en este mundo tan fascinante de la Programacion Web. Seguiré pendiente de todos tus tutos ;)

    Me gusta

  5. gracias por compartir tu apreciación sobre laravel,estoy a punto de realizar un proyecto php y no sabia que framework usar, creo que empezare por este. me aré seguidor de tu blog para aprender mas sobre laravel.

    Me gusta

  6. Yo soy usuario de Codeigniter y al igual que muchos estoy viendo la viabilidad de cambiar a Laravel, lo que me asusta es el consumo de memoria y rendimiento que se multiplica por 10!!!!

    Si utilizáis Zend Server en su nueva versión trae una barra de debug similar a la de Symfony y para que os hagais una idea una instalación limpia solo con un login, sin llegar a comprobar base de datos, solo si has rellenado los dos campos del form(user y pass)…llegan a un consumo de 12mb!!!! Marcando incluso una advertencia el Zend Debugger!!!!

    En codeigniter lo mismo no pasa de 500kb!!!

    Creo que el consumo es algo tambien a tener muy en cuenta, sobre todo en proyectos de cierta envergadura/muchas visitas….porque pueden saturar el server o si trabajas en compartido…notar problemas de rendimiento.

    Un saludo a tod@s!!!

    Me gusta

    1. Es un buen punto. Pero hay que tener en cuenta que Laravel no es recomendado para ejecutar en servidores compartidos, como tu dices es “pesadito”. Ahora, hoy en día agregar un poco de RAM es mucho más barato v/s optimizar el código para ahorrar unos cuantos MB de consumo de memoria. No estoy excusando a Laravel, este mismo punto es uno de los defectos de éste.

      Me gusta

  7. Usas un framework por que todos los usan ??? Esa es la respuesta mas tonta que es escuchado. Y quien te ha dicho que php nativo se trata de llenarnos de codigo en todo, por si no lo sabes php maneja la metodologia MVC y si nunca lo llegastes a usar dejame decirte que nunca llevastes tu php puro a otro nivel.

    Me gusta

    1. No, utilizo un framework ya que me ahorra un montón de trabajo. La verdad no sé en que parte de la entrada dije que lo uso “por que todos lo usan”. Y en realidad a lo de “PHP nativo” me refería a específicamente a lo que está escrito “..haciendo includes en todas partes, mezclando HTML con PHP a diestra y siniestra, realizando consultas a la DB en cualquier lugar..”, más bien conocido como código spaghetti. En ningún momento estoy criticando a aquellos que desarrollan bajo una arquitectura y cierta arquitectura de diseño. Bien debes saber que PHP es muuuuuuuuuuuuuuuuuuuuy conocido por su código spaghetti, por lo mismo se ganó su repudio un buen tiempo, que sigue vigente, pero que con frameworks como Laravel o Phalcon se está logrando limpiar un poco esa imagen.

      Me gusta

  8. perdon por mi comentario pero digo; creo que esta bien probar nuevas tecnologías pero, utilizar una tecnología sólo porque está de moda? no creo que sea un buen camino, además CI es por mucho uno de los mejores, con mucho tiempo y no por nada el creador de php digo que le gustaba más CI porque parece menos un Framework.

    El caso es que, si yo voy a formarme como desarrollador, no voy a querer que un framework me lo haga todo y es por ello que muchos confunden muchas cosas, particularmente sobre este framework. Soy fiel partidario de CI y neta que aborrezco Laravel porque de todos los años que llevo de programador, jamás leí o supe de algo tan absurdo como laravel.

    Lo que se hace nativamente es por mucho muy tedioso y a veces quizás imposible de migrar a laravel y viceversa; no obstante, con CI es otra cosa, si tu tomas un proyecto completo en forma nativa, podrás aplicar reingeniería y migrar todo tu código a CI y vice versa sin muchos problemas.

    yo llevo muchos años programando en CI y jamas he tenido dificultades con ningún proyecto, es más, el 90% de los proyectos que estoy desarrollando son con CI y va todo viento en popa, los demás son test que pronto los paso a CI, creo que el motivo de pasarse de CI a laravel solo porque los demás lo haces es tan absurdo como decir que todos se están haciendo homosexuales y yo deba cometer ese error jajaja.

    El instituto de ciencias y tecnologías de la columbia británica en Toronto Canadá ha apadrinado el desarrollo de CI dando un enfoque educacional al proyecto. Ellislab creadores de CI tienen una cartera de clientes que por mucho superan a la de los creadores de laravel, hay un legado, prestigio y mucho más que a laravel le hace falta por mucho.

    en CI el programador sabe como trabaja el framework, mientras que en laravel es el framework quien toma el control de todo.

    Si se dejara de dar soporte a CI, no importa, tu puedes seguir extendiendo el framework a como tu decidas conveniente y desarrollar un nuevo framework a partir de este, mientras que con laravel es algo que talvez en cierta forma suene absurdo.

    No puedes migrar proyectos antiguos de laravel a nuevas versiones, mientras que con CI es algo de pan diario. Además, no debe de distorsionar el lenguaje de programación.

    En fin… creo que laravel es moda y no algo que valga enteramente la pena, tal vez por hobbie pero no en proyectos de la vida real (Por lo menos para mi).

    Retomo las palabras sabias de un usuario de internet.

    yo he hecho muchos proyectos en codeigniter grandes, medianos y chicos y nunca he tenido problemas, todo depende de la lógica de cada programador y la manera de utilizar el framework de hecho CI es amable hasta con los diseñadores que no tienen conocimientos de programación. no digo que laravel sea malo o que no lo usen, pero CI tampoco lo es, el que sea fácil de aprender y de usar no significa que sea malo, incorrecto, poco confiable etc.

    Si CI nunca me ha dado problemas y he logrado crear buenos proyectos por que cambiar o no usarlo?

    Vamos de la fantasía a la realidad, es decir, de la ingeniería de software al software.

    Cuando se habla de una aplicacion cuyos usuarios seran limitados es facil desarrollar con un framework y usar cuantas tecnicas de ingenieria de software nos pasen por la cabeza. Sin embargo, cuando se quiere sacar el maximo partido a PHP hay que tener mucho cuidado sobre que tanta ingenieria integrar en nuestros proyectos.

    Hablo de ingenieria de software porque es precisamente lo que los frameworks hacen: poner esta a nuestro alcance para que el desarrollo de apps sea mucho mas sencillo. Pero, seamos practicos… que tanto quiero yo de PHP? La respuesta es muy simple: quiero una pagina despues de hacer mi solicitud!

    El problema de los frameworks es que toda su ingenieria se aplica a todas las peticiones y sus maneras de hacer las cosas no son optimas para todas las situaciones.

    Con la ingenieria de software es mas facil hacer esto:
    -> busca los ids -> carga la data segun estos ids (dos querys)

    Con php puro o un framework mas basico seria asi;
    -> busca la data segun este query

    Aunque no puedo negar que me gusta mas el primer enfoque (por facilidad) tengo que admitir que el segundo es mas optimo desde el punto de vista del rendimiento.

    Al final, los frameworks te permiten hacer apps muy rapidamente y si eres muy diestro lo haras a velocidades inimaginables. Pero, en el mundo real las aplicaciones deben estar optimizadas, y la optimizacion comienza por el codigo. Quieren entender a que me refiero? Intenten crear una lista de posts donde cada post tiene anidados sus posts hijos y ademas con paginacion! Un framework te inspira a tomar el enfoque mas facil: carga el post (una query) carga sus posts hijos (otra query, y peor, esta es la query se va a repetir dentro del bucle. ERROR PANTALLA AZUL), mientras que libre de framework puedes idear una estrategia mas adecuada.

    No digo que no deba usarse un framework, ni que no se puedan hacer apps de alto rendimiento en frameworks. Pero, vuelvo y pregunto.. que tanto esperas de PHP?

    Por mas que queramos PHP solo da una respuesta a una solicitud, por lo general una pagina web. Entonces basado en esto, hay que preocuparse porque esta respuesta sea lo mas optima posible: < 200ms latencia.

    Yo soy partidario de CI y creo que es una buena opcion ya que hay una compania detras de el. Ademas, te permite estructurar tu app, es decir aplicar la ingenieria basica para que tu proyecto fluya.

    Los demas tienen piezas de código admirables, una ingenieria preciosa! Pero vuelvo y pregunto: que tanto quieres de PHP?

    yo quiero una pagina despues de hacer mi solicitud! y ustedes que quieren?

    Os dejo este link donde un idiota habla sobre laravel luego se explica más abajo las razones obvias de utilizar CI o desarrollar de forma nativa.

    jajaja! perdon por la expresion pero me cago de la risa leyendo contenido de un programador que ataca a un framework como CodeIgniter el cual tiene sus raíces en una empresa multinacional que provee de mucho recurso informático a grandes empresas multinacionales.

    jajaja… osea… laravel? cual es su legado? de dónde viene? quienes contribuyen en eso? jajaja… yo uso CodeIgniter… y jamás he tenido problemas que no haya solventando… todos proyectos de la vida real… además… laravel utiliza sintaxis de Ruby? que patrañas son esas? si utilizar ese framework solo porque se parece a otro lenguaje de programación distinto al que fue creado mejor me pongo a aprender Ruby… jajaja… php es php… además… pasar proyectos de forma nativa a CodeIgniter es mucho mas sencillo que con cualquier otro framework… ademas… los programadores inexpertos dejan de lado la semántica y la entropía de la programación y el objetivo de cada framework esta muy mal enfocado por cada uno de ellos; no obstante reitero que el utilizar un framework o te hace mas aragan o te hace mas ordenado para escribir código bajo normativas, estándares y convenciones mundiales de código o de sintaxis y agrego que codeigniter trabaja sobre todos esos estándares y su enfoque educacional esta ya dentro de sus parámetros de desarrollo… es decir… que le puede envidiar CodeIgniter nacido en una empresa de programadores expertos inclusive mejor que todos los posteaste aca jajaja que ahora es apadrinado por El Instituto de Ciencias y Tecnologías de la Columbia Británica en Toronto Canadá a Laravel que solo lo usan por moda y que dejan que el framework les haga todo? nadaaaaaaaaa jajaja… desconozco de la industria del software que utilice Laravel… pero de codeigniter si tenemos buena base en todo sentido… es mas… mis proyectos de cuando estuve en la Universidad fueron de manera nativa y los pase a codeigniter sin ningún problema y de igual forma un proyecto de codeigniter se puede pasar con facilidad a forma nativa, así que criticar a un framework solo porke no les suple su necesidad es absurdo… digo… cuando estamos de forma nativa solventamos todo de forma nativa, el programador se las ve de todas formas y maneras posibles porque el producto quede de maravillas y no por eso escribir código es malo jajaja, el mismo creador de PHP digo que le gustaba CodeIgniter porque parecía menos un framework y quien le dice lo contrario? el programador debe de entender lo que escribe no que le agarren la manita para escribir algo jajaja… digo… es mi humilde opinión… puede que este equivocado… no lo se… ustedes juzguen jajaja…

    La verdad he trabajado con CodeIgniter, y ahora con la versión 3.x, es un super potente framework, sinceramente he trabajado con él durante mucho tiempo con mis clientes y en CRMs donde miles de usuarios entrar por medio del patrón de diseño Singleton y no he encontrado problema alguno, excepto por lógica de negocio, pero eso en cualquier framework. He probado otros como Laravel y Symphony y realmente no me han gustado las proyecciones de estos, te dificultan un poco las cosas.

    Además, creo que por lo que hablas, es que no sabes usar codeigniter, tanto como deberías, ya que un framework es para que te ayude a realizar las cosas de la mejor manera, más rápida y más fácil. Si combinas Codeigniter, con Bootstrap, usas Smarty (para los templates), añades getText (para las traducciones de lenguajes) y además incluyes el famoso extendido HMVC.. ufff!!, super potente framework, pero realmente es el lenguaje de programación que se te acomode mejor..

    Me gusta

    1. Hola @abrkof, gracias por tu comentario.

      La verdad es que siento que explotaste un poco respecto a mi post y creo que estás un poco errado respecto a lo que yo escribí. Cosas como “…jajaja! perdon por la expresion pero me cago de la risa leyendo contenido de un programador que ataca a un framework como CodeIgniter…” están completamente fuera de contexto y hasta las encuentro de mal gusto.

      Re-leí mi post – para ver si me perdí de algo, ya que es una entrada que va para los 3 años – y creo que en ningún momento ataqué a CodeIgniter ni hablé mal de él. Es más, recomendaba partir utilizando CI como entrada al mundo de los “frameworks”.

      Nunca me cambié a Laravel por moda, como tu dices. Hice mi investigación previa y me pareció una excelente opción para el proyecto que necesitaba realizar. Así de simple.

      Y seamos sinceros, CI en esos tiempos estaba en decadencia, la comunidad cada vez más muerta. Uno como developer siempre busca feedback por parte de la comunidad, ver que el proyecto crece, que nacen nuevas idea y se mejoran otras. Por suerte BCIT tomó el proyecto y ya van en la versión 3, que me parece excelente.

      Uno es libre de utilizar el lenguaje/framework/IDE/etc que quiera, @abrkof. Pensé en no aceptar tu comentario ya que lo encuentré bastante agresivo respecto a tu opinión. Encuentro que tienes muchos errores de conceptos e ideas mezcladas no bien aclaradas, como por ejemplo:

      …ahora es apadrinado por El Instituto de Ciencias y Tecnologías de la Columbia Británica en Toronto Canadá a Laravel que solo lo usan por moda y que dejan que el framework les haga todo? nadaaaaaaaaa jajaja… desconozco de la industria del software que utilice Laravel…

      Y luego te contradices:

      …Además, creo que por lo que hablas, es que no sabes usar codeigniter, tanto como deberías, ya que un framework es para que te ayude a realizar las cosas de la mejor manera, más rápida y más fácil….

      Yo sólo creé esta entrada con el fin de exponer mis argumentos respecto al porqué me cambié de framework, no para desprestigiar a CI.

      Saludos.

      Me gusta

      1. hola nikoskip, antes que nada muy buen post porque buscaba opiniones con respecto de codeigniter y laravel ya que como el usuario abrkof que ataca a laravel, uno de los blogueros (si no es el unico) de la pagina styde.net, Duilio Palacios, ataca a codeigniter de la misma forma. A pesar que no he probado codeigniter y apenas tambien comienzo con la aventura de los frameworks de php con laravel (por cuestiones escolares obligatorias), tambien opino igual que tú. Cada framework tiene sus ventajas y desventajas, como cualquier gestor base de datos o cualquier lenguaje de programación. Un buen programador sabra adaptar un sistema por sobre cualquier circunstancia. Aqui le dejo un post sobre pros y contra de laravel y codeigniter que me parecio muy buena comparativa: http://carlos-herrera.com/laravel-vs-codeigniter/ . Así que también buscare turorial de codeigniter y cual me puede adaptar mejor en caso de culquier proyecto que pudiera aparecer.

        Me gusta

Deja un comentario (puedes utilizar Markdown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s