D'après le peu de connaissances que j'ai des frameworks, CakePHP et CodeIgniter jouent à peu près dans la même cour comparés à des frameworks plus compliqués comme Symfony ou Zend.
Mais quels sont les différences, les avantages de chacun de ces deux frameworks ? Facilité/rapidité d'aprentissage, fonctionnalités, performance....
@Grafikart : Qu'est-ce qui t'as décidé de choisir CakePHP plutôt que CodeIgniter pour la conception de ton site et tes tutoriels ?

Je cherche à faire une comparaison poussée de ces frameworks pour choisir le plus adapté à chacun de mes projets. Et je pense que ça peut servir à pas mal de gens également.

13 réponses


Codeigniter 2.0.2 :

  • Un des framework les plus légers sur le marché
  • Une documentation très fournie, et une communauté très active, il y a beaucoup plus de tutoriels et de gens prêts à aider que sur Cake
  • Beaucoup de plugins de dispo : pour les modules, l'authentification, avoir un ORM lié au système ActiveRecord de Codeigniter
  • Possibilité d'installer Doctrine très simplement, ce qui pour moi est un gros plus
  • Très facile à apprendre, on peut apprendre directement en réalisant son projet
  • Pas de règle de programmation imposée, tu codes comme tu veux
  • Beaucoup de helpers originaux intégrés, pour créer un panier, un calendrier, la manipulation d'images... qui ne le sont pas ailleurs

CakePhp 1.3.10 :

  • Un ORM très poussé pour les model
  • Beaucoup de helpers intégré contrairement à Codeigniter ou tu devras pour la plupard les coder à la main
  • Un système de routing plus poussé que Codeigniter
  • La "CakePhp magic" aide pas mal, En effet CakePhp va t'aider à coder tout et ce très simplement.
  • La génération de code via la console, pratique pour créer les modèles et des CRUD
  • L'authentification intégrée et pratiquement automatique. Bien qu'elle ne soit plus automatique dans la v2 de Cake
  • Une très bonne documentation sur le site officiel avec le Cookbook mais malheureusement peu de sites qui disposent de tutoriels. Grafikart étant mon préféré jusqu'ici pour tout ce qui est resources de CakePhp (et tout ce qui est tutoriels vidéos, je les trouve plus sympa que les autres dtf :p)

Pour ce qui est de Symfony et Zend, ils ont la réputation d'être compliqués. Zend est actuellement un ensemble de libraries, tu n'es pas obligé de l'utiliser en tant que Framework. Mais il est certes très compliqué comparé à la concurrence, et je ne trouve pas qu'il nous simplifie vraiment le travail, c'est long et "chiant" il faut l'avouer de coder avec Zend. Pour créer un modèle, il faut que tu fasses à la main, le Model, la base et le mapper, et qu'en plus tu y imbriques les fonctions "basiques" à chaque fois. Je ne trouve pas ça franchement très intuitif mais ce n'est que mon avis.
Pour Symfony, certes il a cette réputation mais au final il est aussi facile d'accès que CakePhp. C'est juste une autre approche d'une façon de coder. Je parle ici de la version 1.4, je suis à peine à commencer à me pencher sur la v2, et là il s'agit d'une autre approche encore. Symfony est magique sur certains points. Le système de routing est particulièrement bien pensé et pratique pour générer ton code. Il se base sur Doctrine pour à peu prêt tout ce que tu veux faire dans ton architecture. Tu créé ton routing avec des sfDoctrineRoute, Doctrine interprète ton url et créé l'objet de requête lui étant lié. Il peut générer automatiquement les slugs sans que tu aies à lui demander, et tu n'es pas "obligé" (bien sur on peut contourner ça partout mais moins facilement) de lui demander de les éditer ou de les enregistrer.
Imaginons que tu aies un blog et que tu veuilles faire tes liens de la forme http://monsite.com/blog/nom-du-post-dans-le-blog, tu déclare un ActAs Sluggable dans ton schéma de base de données, tu créé et dis que ta route devra générer un objet (2 lignes jusqu'ici), et avec une 3ème ligne tu récupère l'objet créé automatiquement lors de l'appel de la page. Il n'y a plus qu'à utiliser les résultats de ta requête, et ta route, ton controller et ta vue sont crées. De plus, il joue comme cakephp, les created et modified (appelés ici created_at et updated_at) sont modifiés à chaque fois pour peu que tu les ai déclaré, ainsi que ton slug si tu as fais la manipulation que je te parlais précédemment.
Niveau documentation je n'ai pas encore vu plus complet, pour la 1.4 du moins), le site officiel te donne un tuto de site complet de la création du projet sur papier au déploiment du site sur un serveur de production, en passant par la gestion des utilisateurs, du cache etc... Tu as un tutoriel équivalent sur le site de la ferme du net avec un autre projet, et beaucoup de tutoriels videos.

Personnellement je regrette de ne pas m'y être mis plus tôt, si j'avais su je l'aurai fais il y a déjà longtemps :/ Mais la je préfère concentrer mes efforts sur la v2 qui ne va pas tarder à sortir en version finale. Mais je ne vais pas me prononcer encore pour ça, il est trop tôt.

Mais il ne faut pas croire qu'un framework est plus compliqué qu'un autre vraiment, tout dépend de l'utilisation que tu en fais et surtout de ta façon de coder. Chacun a une approche bien à lui du code. Yii est aussi un framework très complet et facile d'accès mais je n'aime pas trop pour ma part leur façon de procéder sur certains trucs, mais c'est un avis personnel, les gouts...

Voilà, j'espère avoir pu t'éclairer !

Djul
Auteur

Excellent, tu éclaire la plupart de mes questions. Du coup vu que je recherche plus à réaliser un (des) projets qu'à maitriser un framework, ma balance penche pour CodeIgniter pour ces raisons :
_- Très facile à apprendre, on peut apprendre directement en réalisant son projet

  • Pas de règle de programmation imposée, tu codes comme tu veux
  • Une documentation très fournie, et une communauté très active_

Plus les avantages en terme de performance et extensibilité. Et puis bon, CakePHP est sympa mais ne fonctionne pas de base dans mon Xampp (erreur ligne 1060 du fichier de config) quand je fais le tuto d'initiation. Pas cuit le gateau.

Doctrine a l'air intéressant, il faut que je regarde ça de plus près. Si j'ai bien compris le principe, ça permet d'accéder à ses données comme si elles étaient des objets. Mais celà permet-il par exemple de modifier rapidement et facilement la structure de la base et des models si nécessaire, par exemple si j'ai envie de rajouter un nouveau champ sur une table ?

Symfony à ce que j'en ai vu et ce qu'on m'a dit, est très complet mais requiert un aprentissage assez long et donc du temps supplémentaire, ce que je n'ai pas (si je me rappelle bien, la doc officielle propose la création d'un projet sur quasiment un mois). Et comme dit précédemment, je cherche à créer un projet de CMS et non à maitriser un framework. Après ça peut toujours changer auquel cas je reconsidèrerais ce framework. A vrai dire, je ne sais même pas si un framework est le plus adapté pour la phase de création rapide du projet (par rapport à un CMS déjà existant par exemple).

Autre question : je m'étais fais à l'idée d'un espace administrateur autogénéré avec Django, mais quels frameworks PHP offrent cette fonctionnalité ?

Symfony 1.4 est le seul a vraiment faire ce genre de autogénération à ma connaissance.
Sinon je tiens juste à revenir sur quelque chose dont j'ai parlé mais le fait de "coder" comme on veut ets sympa quand tu développes tout seul, du moment que tu passes sur des projets tout seul ou que tu veux intégrer un plugin ou une library déjà faite, tu peux vite te retrouver perdu. C'est la qu'est le véritable intérêt des framework comme CakePhp ou Symfony (Django et Ruby on Rails aussi dans ces langages). Certes il est plus long d'apprendre les conventions pour faire ce que tu as à faire mais au final tu as un code plus clair et maintenable facilement. Imaginons que du jour au lendemain tu changes d'avis sur une façon de programmer avec Codeigniter, tu vas reprendre des habitudes différentes et te trouver perdu si tu dois rééditer un ancien projet.

Après tout dépend de ce que tu cherches vraiment. Actuellement je me suis tourné vers Django ou Ruby on Rails (toujours en phase de test des 2 frameworks pour savoir lequel des 2 me conviendrait le mieux). Je trouve très sympa l'admin generator de django et le système d'authentification prêt à l'emploi (Auth et Acl et pas juste Auth) qui fait gagner un temps précieux en début de projet pour coder le reste. Mais là encore, ce n'est qu'un avis personnel :p

Djul
Auteur

Si ça peut te décider entre RoR et Django, tu trouve plus facilement et pour moins cher un hébergement Django. Ruby On Rails permet quand à lui de déployer un projet plus facilement qu'avec Django grâce aux gems. Après au niveau du langage c'est très similaire à ce que je m'en souviens.

CodeIgniter n'a vraiment aucune convention de codage ? Effectivement je pense ne pas toujours travailler tout seul sur mon projet, ou au moins garder une perspective communautaire au long terme, donc la convention est un critère à prendre en compte. Sans parler d'en effet si je dois rééditer le projet :(

Codeigniter n'a pas énormement de conventions à part certains noms de classe qui lui sont réservéset qu'il ne faut pas réutiliser. Sinon tu peux faire un peu comme tu le souhaites, il te fournit les bases du MVC, certaines librairies, et à toi de voir ce que tu veux en faire, si tu veux les utiliser ou non, et comment. C'est ce que je ne trouve pas très pratique avec ce framework, il n'impose vraiment rien, tu peux même te passer du model si tu le souhaites.
Par contre si tu te fixes des conventions à toi avant de commencer et que tu t'y tiens, tu peux faire des projets très vite et sans trop avoir à chercher comment y parvenir. Mais je trouve Cake, ou Yii ou Symfony plus pratique cependant pour tout ça.

Pour Django ou Ruby, je préfère la syntaxe du Ruby personnellement, bien qu'il est vrai que c'est un peu similaire. Par contre les outils de Django... C'est une pure merveille. Mais je n'arrive pas à m'y faire à Python, je ne sais pas vraiment pourquoi :/ C'est... Bizarre.

Il y a le nouveau framework Yii aussi, est ce que quelqu'un l'a déjà testé ?

Salut
Concernant le "Pourquoi Grafikart a utilisé CakePHP", je pense pouvoir répondre : il me semble avoir lu sur FormSpring qu'il avait choisi Cake à l'époque car il connaissait quelqu'un qui pouvait l'aider sur ce framework.

Slùt les amis ,,

Apres ma petit experience : J'ai trouve que Codeigniter est plus facile a utiliser et meme à apprendre grace a sa simple documenatation,,

c'est mon opinion et je laisse la parole pour les autres membre

Ah,Dzl pour mon francais ;-)

Voilà je remonte un peu le sujet parce que j'aimerai re-faire mon site qui actuellement est en PHP Procédural et j'aimerai le passé sous CakePHP pour que se soit plus simple pour moi au niveau codage et maintenance. Mais je me pose la question, si c'est pas mieux d'utiliser les nouveaux tuto de Grafikart en développant mon propre MVC. J'hésite fortement, que me conseillez-vous ?

Personnellement je te conseillerait d’utiliser directement cakePHP, qui est bien plus complet en fonctions et en sécurité. Le tuto est là pour, justement, comprendre comment fonctionnent le MVC et cakePHP et le script étant basé sur cake, il est très facile d'aller dessus (ça évite aussi de re-développer ce qui existe déjà).

Je vient de me mettre à cake en voyant ces supers tutos et c'est en vrai régal, ça change la vie ! Merci Grafi ~~

Personnellement, je pense que la meilleure solution reste quand même de les tester. C'est bien de demander à autrui mais l'expérience professionnelle de chacun n'est pas la même et personne de comprend de la même manière.
Quand j'ai commencé à m'interresser à cake et à symfony, tous le monde m'a orienté vers symfony. Finalement, j'ai beaucoup de mal à structurer ce framework, j'ai donc décidé de prendre cakephp.
Ensuite, je dois avoué que symfony n'a pas été mis à la porte par moi, je m'autoforme dessus afin de l'utiliser pour de futur projet.

Rien ne t'empêche d'utiliser le framework X, et d'y intégrer des fonctionnalités du framework Y ....
Pour ma part j'utilise CodeIgniter sur la quasi-totalité de mes projets, et j'ai repris des classes, libraries, helper de différents frameworks pour le compléter, car je suis fan de son mode de conception (singleton design pattern)

A non pas du tout. CakePHP est bien plus puissant que CodeIgniter et joue dans la coure justement des plus gros frameworks ou bien des frameworks pour de plus gros projets tel que Symfony2, Zend framework, fuelphp ou laravel.

CodeIgniter convient plus à des moyens ou plus petit projet, la taille du projet ne se mesure pas au nombre de catégorie et de monté en charge je précise.
C'est juste qu'avec codeigniter tu seras obligé de hacker ou bien d'étendre pas mal le coeur du framework notamment pour la gestion i18n multilingue ou bien l'implémentation d'ACL et de login d'un espace membre ou admin.
Et encore tu auras d'autres petites limites que tu n'auras pas avec d'autres plus gros framework avec plus de possibilité.

Cela n'empêche pas de voir sur internet ou en entreprise de grosses applications tourner sous CodeIgniter, bien souvent j'ai vue des entreprises fière comme des papes de leurs pseudos grosses applications développé from scratch et qui sont des usines à gaz mal codé, bancale, lente et j'en passe.
Et généralement ce sont les mêmes qui vont critiquer les framework ou cms disant que symfony c'est trop lourd et j'en passe (Ces pequenots me font toujours autant rire car ils ont une ouverture d'esprit aussi ouverte d'un bernard l'hermite, cherchez pas trop le rapport je suis allez loin ! :D).

Je n'aime pas du tout CakePHP, si tu cherches une bonne alternative à cakephp il faudrait plutôt allez voir du côté de Laravel ou bien Fuelphp encore. Rien ne t'empêche d'utiliser Laravel 3 qui est bien plus simple d'apprentissage que laravel 4, car laravel 4 s'oriente de plus en plus vers les conventions symfony2 et d'ailleurs de pas mal de nouveau framework ou bien cms notamment (fuelphp 2.0 va s'orienter aussi vers les vendors et norme psr-x).

Laravel 3 comme fuelPHP sont issue de la philosophie de CodeIgniter, et ça c'est TOP. Donc la courbe d'apprentissage est relativement rapide à l'inverse d'un Zend ou symfony2 voir même cakephp. Oublie ZendFramework 2 par contre, bien qu'il dispose d'une excellente librairie, Zend 2 a complètement pompé sur symfony2 à la différence que tu auras beaucoup plus de boulot à fournir afin de te rapprocher des fonctionnalités de Symfony2. Ce n'est pas pour rien qu'un grand nombre de développeur issue de Zend sont parti vers Symfony2.

Mais ces frameworks sont complexes à prendre en main (je n'ai toujours pas finit et fait le tour de symfony2 j'avoue avoir un peu délaissé côté perso pour le moment).

On va dire que CodeIgniter est le framework le plus simple et indiqué si tu souhaites créer en perspective une assez grosse application web, tu seras freiné sur certaines choses que tu souhaites sans doute, mais la facilité d'utilisation des les docs sur le web te permettront de faire pas mal de chose déjà.

Conseil:

  • Si tu cherches la rapidité, facilité d'apprentissage, pour un projet assez volumnieux: CodeIgniter

  • Si à l'inverse tu as un peu plus de temps à consacrer mais que ton projet est conséquent et à nature "professionnelle" alors je te conseille de t'orienter vers FuelPHP ou Laravel 3 ou 4.

  • Et si tu es plus courageux alors Symfony2.

Mais oublie cakephp, toutes les fonctionnalités que possède cakephp smyfony2 en possèdent plus et est à l'avant garde du développement web php (mais cela a un coût de migraine neuronnales).
En fait tu as exactement toutes les fonctionnalités qu'il te faut avec laravel ou fuelphp mais en plus simple que CakePHP.
Après si tu préfères CakePHP et l'organisation, type de configuration de code etc... chacun son choix.

Je trouve CakePHP bien trop bordel en terme d'organisation dossier/fichier, de configuration (code en pagaille et choix pas très judicieux) et il était réputé pour être plus lourd que les zend et symfony à l'époque. Après cakephp a un ORM très complet, une gestion des acl et authorisations évolués, gestion de formulaire et validation très avancé.