Critères de choix d'un framework PHP

Ingénierie web | Maîtrise d'œuvre | PHP

En tant que chef de projet dans une grosse structure, justifiant son poste par sa capacité à résoudre les problèmes qu'il a lui-même créés, vous êtes décidé à bâtir la prochaine application corporate sur un framework PHP. En plus des critères de choix déjà évoqués, vous veillerez à la présence de fonctionnalités qui permettent aux développeurs de se concentrer sur les particularités de l'application, en les libérant de l'écriture des briques de base :

  • Implémentation du design pattern MVC
  • Présence d'un module de logging
  • Contrôle total sur les URLs
  • Validation des formulaires
  • Gestion des accès aux bases de données
  • Implémentation de l'inversion de contrôle (IoC)
  • Gestion de l'internationalisation
  • Système de caching
  • Authentification et gestion des profils utilisateurs
  • Gestion de la montée en charge
  • Prise en compte de la sécurité (cross scripting, code injection, sql injection, vols de session, etc)
  • Système de communication entre les modules
  • Module Ajax

L'examen d'un certain nombre de framework (Zend Framework, CakePHP, Symfony Project, Seagull Framework, WACT, PHP on TRAX, ZooP Framework, Navigator, CodeIgniter) montre que se sont surtout des usines à gaz. Seul CodeIgniter sort du lot : il est très léger grâce aux modules indépendants, qui ne sont chargés qu'à la demande du contrôleur, mais il a le défaut de la rigidité des URLs. LE framework MVC est donc plus une collection de composants utilisables au sein d'un micro container. C'est la démarche de CodeIgniter et de Zend Framework, bien que ce dernier soit un peu plus complexe.

L'utilisation d'un framework nécessite toujours un investissement pour former les développeurs. Cet investissement sera d'autant plus important que le framework sera complexe. Cette complexité entrainera également des frais plus élevé de maintenance et d'évolution. Dans bien des cas, cet investissement est beaucoup plus rentable s'il est effectué dans le développement d'un micro-noyau maison...

Je pense que vous sous

Je pense que vous sous estimez la puissance de Drupal, qui est passé dans les dernières versions, de CMS à CMF Effectivement, Drupal est un Content management Framework qui fait pratiquement tout ce qui vous avez mentionné dans votre liste. La force de Drupal c'est la force du groupe, qui est au service de chaque membre. Aussi, le système de hooks internes permets de coder bcp plus rapidement qu'en php normal. Je pense que Drupal devrait faire l'objet d'une anbalyse de votre part en tant que framework php! A+ Alexis

Sur Drupal

Merci Alexis pour ton commentaire.

J'ai regardé Drupal, il y a quelques temps, et je l'ai même adopté pour ce site ainsi qu'un autre. Je ne sais pas s'il a beaucoup évolué depuis la version 4.6, mais je n'ai pas pu faire exactement ce que je voulais pour ce site : j'ai codé des bidouilles atroces...

Le premier et principal reproche que je fais à Drupal, c'est que ce n'est pas un framework MVC. Pour moi c'est rédhibitoire.

4.6 ??

4.6 ?? heh, on en est à la version 5.1 maintenant et oui il a énormément progressé ces deux dernières années ;) Juste pour ma culture générale qu'est ce qu'un framework MVC?? Est ce que c'est un genre de CVS?? Sinon, je maintiens que drupal fait tout ce que tu listes dans ta liste de trucs obligatoires pour un bon framework, et "out of the box" en plus! Comment sauver des heures de codage inutile... A+ Alexis

MVC

Oui, je sais, je ne suis pas vraiment à jour... Mais Drupal n'implémente pas le design pattern MVC (Modèle-Vue-Contrôleur) qui permet une séparation entre complète entre les données à afficher et la mise en forme visuelle de ces données. Je me suis longuement battu avec lui, mais il n'a rien voulu savoir ! Il n'est absolument pas designer dans l'esprit IoC non plus...

Encore une fois, je ne suis

Encore une fois, je ne suis pas d'accord. Les données et les "vues" sont complétement séparées dans Drupal. Il y a donc trois niveaux : la base de données qui garde le contenu, ensuite il ya l'interface d'administration et les 'hooks' qui permettent d'utiliser le framework sans réinventer a roue à chaque fois, et finalement il y a le système de template (phptemplate) qui permets de contrôler le output sans toucher au contenu. Totale séparation du contenu et de sa mise en forme... mais encore une fois je pense que de critiquer drupal sur la version 4.6 est une grave erreur, car 4.6 date d'il y a deux ans maintenant. A+

Drupal 5.1

J'ai téléchargé Drupal 5.1 et regardé le code. Il n'y a pas de changement fondamental dans la philosophie... Le modèle MVC ne correspond pas à ce que tu décris. Il s'agit pour chaque requête HTTP, de séparer modèle, vue et contrôleur. Par exemple un billet de blog est extrait de la base de données via une fonction/un objet d'accès aux données invoqué par le contrôleur et stocké dans un tableau/un objet/des variables mis à disposition de la vue.

Le contrôleur peut par exemple appeler la fonction $post = post_select_by_id($id) qui renvoie un billet issu de la base de données. Le contrôleur peut ensuite remplir le modèle : $model['title'] = $post->title; $model['body'] = $post->body; La vue se charge ensuite de l'affichage des données :

<h1><?php echo $model['title']; ?></h1>

La philosophie est ici très différente...

Rebonjour,

Rebonjour,

Je ne suis pas certain que je vois ou est la différence, entre ton exemple et ce que fait Drupal, puisque Drupal utilise aussi trois couches de logique qui sont séparées. Certes certains modules contribués (donc codés par des membres de la communauté et non pas des modules du core de drupal) peuvent mettre du html directemnet dans leur code, mais dans la plupart des cas cet html est inclus dans une fonction theme() qui permets de facilement récupérer cette fonction dans son fichier template.php afin de la transformer, donc de modifier le 'output' sans avori à toucher au code du module.

Aussi, le système de PHPtemplate permets de faire exactement ce que tu mentionnes dans ton exemple, c'est à dire faire une page 'template' et lui passer des variables du thème.

ex: <h1 class="title"><? print $title ?></h1>

La variable title est donc utilisée pour afficher le titre de manière dynamique ce qui permets de coder une seule page pour afficher toutes les pages d'un site, dans le cas d'un blog, par exemple.

Je ne dis pas que Drupal est parfait, ou meilleur que les autres solutions maison, mais je pense qu'avec une semaine d'expérience en drupal 5, c'est un peu rapide pour passer le jugement à savoir si c'est ou pas un framework php de la trempe des autres cités dans ce texte.

Comme je te disais dans mon mail, la limite dans Drupal est souvent posée non pas par la flexibilité du framework mais par l'imagination, le temps, ou le talent des développeurs php. Parce que de mon expérience, tout est possible avec Drupal, quand il s'agit de faire des sites web et des applications web puissantes.

Tout dans drupal est modifiable, donc faut pas se fier a l'installation par default qui est plutôt le côté CMS que CMF.

ps. une discussion à ce sujet surle forum de drupal, ou ils laissent entendre que bien que recommandé le MVC est encore optionnel dans Drupal. Évidemment on encourage les codeurs à contribuer des modules qui sontMVC, mais on peutpas forçer des codeurs à suivre les standards du core, puisque les modules contribués ne sontpas controllés par les lead developpeurs de drupal.

http://drupal.org/node/116677

A+

J'ai étudié avec attention

J'ai étudié avec attention la discussion concernant la problématique Drapel/MVC (http://drupal.org/node/116677). C'est très intéressant car elle montre à quel point deux conceptions/philosophies/modèles différent(e)s sont incapables de se comprendre. L'incompréhension est pour moi du même ordre que celle qui divise la droite et la gauche : tout le monde souhaite le bien commun, mais personne n'est d'accord sur la façon de l'atteindre.

Pour moi Drupal n'est pas un framewok MVC. Je n'en ai pas parlé dans mon billet, car je le considère avant tout comme un CMS. C'est un CMS offrant des possibilité d'extension considérable si l'on adhère à la logique... Je ne dis pas que la logique de Drupal est mauvaise, je dis simplement que je ce n'est pas la mienne et que je n'arrive pas à l'intégrer...

Je pense que Drupal est un excellent choix quand on peut le maîtriser. Je ne le maîtrise pas, je ne l'adopte pas. En fait je l'ai adopté pour ce site, mais je ne m'en sort pas...

Si tu as des disponibilités, je suis prêts à faire un exercice avec toi pour te montrer que je ne dénigre pas Drupal, mais que, simplement, je ne le comprends pas. On pourrait même écrire une série de billets parallèles sur le sujet !

Bon, mon code a été

Bon, mon code a été enlevé du message... clque sur éditer pour voir mon exemple, il ressemble pas mla au tien de toute manière. Aussi ajouter le saut de ligne automatique sur le blog permettrait de pas mal améliorer la lecture du texte! A+

Réparé

J'ai réparé ton code et activé l'option de formatage simple des commentaires. Ceux-ci devraient, effectivement, être plus lisibles...

Je partage cet avis sur

Je partage cet avis sur certains points mais pas tous. Effectivement, vouloir créer des frameworks complexes en PHP pour se "positionner" sur le marché (face à ceux en Java, Ruby ou Python) est inutile. PHP n'a jamais été et ne sera jamais un langage théoriquement pur. Mais il est facile d'accès, les résultats se voient vite. Par contre, créer son mini-framework maison peut être dangereux : - La formation est toujours nécessaire pour les nouvelles recrues. - Les aspects sécurité et performance ne peuvent pas être aussi poussés que sur un projet open source. - On ne bénéficie pas du retour d'expérience de milliers d'utilisateurs. - Le code du framework maison ne bénéficie que des compétences internes (et les génies sont rares !). - Les clients acceptent de moins en moins des solutions maison qui les lient à leur prestataire. Pour moi, un framework maison n'a d'intérêt que pour un développeur indépendant sur des petits projets. Ou à l'opposé, sur de très gros sites qui réclament une optimisation de chaque détail pour en améliorer les performances. Pour finir, je suis tout à fait d'accord avec le choix des frameworks légers : CodeIgniter et Zend Framework... avec une préférence pour le second ! Et j'explique pourquoi : http://blog.christophelebot.fr/2007/05/29/zend-framework-rc1/

Entièrement d'accord

J'ai écris ce billet il y a plusieurs mois, quand je cherchais un framework PHP pour mon premier projet. Venant du monde Java, j'ai été vraiment effaré par cette profusion de frameworks singeant Java. Le ton de ce billet est donc volontairement anti !

Ceci dit, le choix d'un framework (existant ou fait maison) dépend de nombreux paramètres (taille et nature du projet, budget, taille et compétence de l'équipe, etc) et il n'y a pas de réponses toute faite... Mais je suis content de voir que tu adhères à ma sélection : CodeIgniter et Zend Framework.