[PHP] MVC, templates et autres joyeusetés

Bonjour à tous.
Je code depuis un certain temps en php « à l’arrache » et je cherche à faire du code plus structuré (notamment parce que l’année prochaine je vais bosser sur des projets avec d’autres personnes)

J’ai donc fait des recherches et je me demande ce que vaut CakePHP, ou son homologue de chez zend le Zend Framework.
Et aussi, qu’est-ce qu’apporte l’utilisation d’un moteur de template dans le genre smarty ?

Et vous, en PHP, vous utilisez quoi ?

Merci d’avance :slight_smile:

J’utilise Smarty avec mon groupe de PFE et j’avoue que c’est plutôt utile.
La séparation code / design permet au designer de notre groupe de travailler pèpère sur les différentes pages pendant que l’on continue nos devs.

On utilise aussi au taff un modèle MVC (développé par nous pour nos besoins) et ça nous a permis d’avancer bien plus vite sur le développement de nos refontes (nous aussi on utilisait du code à la rache).

Par contre, je peux pas trop t’orienter sur les différents systèmes existants (n’ayant jamais trop fait de recherche à ce sujet), je peux juste plussoyer ton initiative. Le code propre, c’est le bien !

Hello,

J’utilise depuis pratiquement 2 ans Cakephp (autant dire depuis le début), et c’est vraiment un outil qui vaut le détour. Y’a pas mal de fonctionnalités sympa en natif comme l’internationalisation (via gettext), le caching (fichier, bdd ou memcache), les associations et l’active record pattern (comprendre: pratiquement plus de sql à écrire), un outil de génération de code en ligne de commande (bake), la validation des formulaires, la pagination avec tri, bref pleins de trucs utiles qui font gagner du temps. Y’a eu en plus de gros effort de fait niveau documentation (j’en sais quelque chose :crying:), et la version actuelle (1.2 rc2) est utilisable en production.

Le seul bémol que je mettrais c’est si vous souhaitez réaliser un site ou vous aurez une problématique de type widgets, cad « des vues inclues dans une vue », quelque chose dans le genre de netvibes ou page d’acceuil de la BBC. J’en ai fait l’expérience, et même si ça ce gere avec Cakephp, c’est pas vraiment fait pour ça (de base l’instance c’est un controller, 1…n modèles, une vue). Dans ce genre de cas je pense que le Zend framework est mieux en terme de perf (j’ai pas fait de choses aussi complexes avec Zend), même si la courbe d’apprentissage est plus longue. En gros avec Zend il faut construire son moteur soit même, alors qu’avec Cake tout est prêt à l’emploi.

Pour smarty, y’a possibilité de l’intégrer dans Zend et Cake pour remplacer la logique de vue de base (faut fouiner ça à déja été fait), mais je vois pas trop l’interet à par si vous avez des graphistes/intégrateurs qui savent déja préparer des vue en Smarty.

My 2 cents :slight_smile:

Oyo !

Pour ma part on utilise dans ma boite le Zend Framework depuis sa release 1.0 (grosso modo 1 an quoi) et on encourage les derniers projets PHP à se fondre dans le moule.
Le MVC est clair, un petit bémol cependant sur la partie View que je trouve pas terrible niveau conception interne (les fonctions magiques de PHP c’est sympa mais ca te b**se l’auto-completion… merci bien.). Enfin bref =)

Je n’ai pas vraiment bidouillé CakePHP qui est surement plus mature donc je ne comparerai pas ~

Dans le ZF, une structure prete a l’emploi est proposée, et le reste du Framework se compose d’une grosse library pour trier les patates, faire le café, active record, le cache, et tout le toutim… La communauté derrière et surtout le fait que ce soit un produit Zend assure un suivi fort et un produit d’avenir dans le monde des frameworks PHP.

Aujourd’hui, amha, les 2 mastodontes sont Symfony et Zend Framework…
La prise en main de Symfony est plutot longue, surtout sans expérience du MVC, du scaffolding, etc… Tandis que le ZF (plus brute de décoffrage), une fois son concept MVC assimilé, laisse plus de liberté… Les philosophies sont différentes, les préférences de chacun tout autant =)

Je suis dans la même démarche que toi et je “joue” depuis quelques semaines avec, entre autres, différents frameworks.
Les deux qui m’ont impressionés pour l’instant sont CakePHP et pureMVC. CakePHP est une boîte à outils fantastiques, mais il me semble que si tu souhaites surtout maîtriser le template MVC (sans partir de zéro), pureMVC est plus adapté.

Depuis quelques mois, j’utilise Zend. Et j’en suis vraiment satisfait. Comme toi je codais à l’arrache mais j’en avais marre de tout faire à la main.
Comme dis terenas, y’a une telle librairie dans zend que c’est difficile de pas trouver ce qu’on cherche.
Je suis parti sur ce tutoriel pour l’architecture MVC.

Je ne connais pas les autres framework donc je ne peux pas te dire quel est le mieux.

Concernant smarty, je l’ai utilisé il y a 2 ans. C’est bien mais pas indispensable, surtout si tu as une archi MVC.

Je teste cakephp qui m’a l’air excellent ! Beaucoup de méthodes déja dispo.

Mais la je bute sur un truc qui m’a l’air pourtant banal.
J’ai créé un dossier imgs/ (contenant les images) dans le dossier de cakephp et je n’arrive pas à y accéder depuis mes pages.
Il me dit qu’il n’y a pas de controlleur associé.
Comment lui faire comprendre que ce n’est pas un chemin vers un controlleur mais un dossier tout simple ?

perso je viens de passer deux jours sur cakephp (avec pleins de docs) et je trouve ca bordélique et illisible.

les this->machin->bidule() ca me saoule tres vite ou les $this->redirect(array(‘controller’ => ‘bidule’, ‘action’=>‘home’));
ou les this->data qui font wagon

sans compter que les regles sont je trouve aussi bordélique :

le bordel de faire des classes avec des variables et des fonctions je trouve ca un peu crades.
sans compter les

Je devais faire un site web pour quelqu’un et je vais plutot le tanner pour du django que du php vu le temps qu’il me reste.
rien que l’indentation de python rends le bidule plus lisible et sans compter toute les libs pythons.

Bussiere
perso entre cake et django vive django (le framework zend je n’ai pas encore essayé).
et j’ai chopé de la tres bonne doc sur le net pour cakephp pour ceux qui veulent pm …

[quote=“Bussiere, post:8, topic: 38034”]perso je viens de passer deux jours sur cakephp (avec pleins de docs) et je trouve ca bordélique et illisible.

les this->machin->bidule() ca me saoule tres vite ou les $this->redirect(array(‘controller’ => ‘bidule’, ‘action’=>‘home’));
ou les this->data qui font wagon[/quote]Bienvenue chez les grands. Ce que tu écris est la conséquence d’un paradigme de l’ingénierie informatique appelé “Programmation Orienté Objet”. MVC est une méthode de conception des applications qui existe depuis un petit moment.

Maintenant, j’ai téléchargé CakePHP pour y jeter un oeil, histoire de juger sur piece du code “bordélique et illisible”. Histoire de préciser un peu le background, je pratique pas PHP; je sais juste vaguement que $var est une variable (préfixée par $ donc). J’ouvre donc les 2 plus gros fichiers, et je n’y vois que du code, bien documenté, avec une organisation plutot bien foutue, tout ça rangé dans des dossiers assez évocateurs, comme “model”, “view”, et “controller” (comme MVC… merde…c’est bien pensé dites donc votre truc là…). En gros, en 30 secondes, sans aucune xp en PHP, je savais où j’etais, ce que ça faisait. J’etais en terrain connu.

Je pige vraiment pas comment tu peux trouver ça bordélique, et je vais enfoncer le clou dans la suite…

[quote=“Bussiere, post:8, topic: 38034”]sans compter que les regles sont je trouve aussi bordélique :

le bordel de faire des classes avec des variables et des fonctions je trouve ca un peu crades.
sans compter les[/quote]
… les quoi ? On ne saura jamais.

BREF ! Du grand là, du masterclass. “Le bordel de faire des classes avec des variable et des fonctions”, ça s’appelle l’encapsulation. Le principe est de ne donner acces à une instance que par l’intermédiaire des méthodes qui la compose. Comme si on voulait modifier la masse d’une personne, on utiliserai la méthode FaireRegime(), parce qu’on a pas moyen d’acceder a sa masse directement. (ou CouperMembre(), mais a priori, la santé de l’instance personne en souffrirai)

Pour ta gouverne, sache que cette façon de programmer, que tu trouves “bordélique”, est pratiquée par la majorité des programmeurs “objets” en activité. C’est le principe fondateur de la POO.

[quote=“Bussiere, post:8, topic: 38034”]Je devais faire un site web pour quelqu’un et je vais plutot le tanner pour du django que du php vu le temps qu’il me reste.
rien que l’indentation de python rends le bidule plus lisible et sans compter toute les libs pythons.[/quote]
Avis perso, zero valeur. Tu veux que je t’en racontes une bonne ? Le python, je peux pas l’enquiller. Y’a pas de bracket. “Un langage qui base ses codeblocks uniquement sur l’indentation ? Vous plaisantez j’espere ?” Apres on pourrait se prendre la gueule a savoir qui est le plus lisible entre mon C# (mon langage préféré) et ton Python, ça menerait a rien. Les avis persos de fanboys, ça ne mene jamais a rien. Reste qu’en ouvrant les 2 gros fichiers dont je causais plus haut, j’avais deja retrouvé mes petits sans rien connaitre au PHP. Comme quoi.

Pour en finir avec la “lisibilité”, je connais des personnes qui ne jurent que par l’operateur ?: alors que je le hais. Je le trouve imbitable. Illisible. Et pourtant…

D’autre part, tu oublies le propos de départ de ce sujet : MVC en PHP. C’est pas qu’une question de gout, c’est une question de compétence et de travail. Eka souhaite se former a PHP (grand bien lui fasse, c’est une techno robuste, tout comme peuvent l’etre python ou RoR dans de nombreux cas), et plus particulierement aux frameworks de type MVC, parce qu’il a déja une base de compétences en PHP, et qu’il sera amené a bosser en PHP avec d’autres personnes.

[quote=“Bussiere, post:8, topic: 38034”]Bussiere
perso entre cake et django vive django (le framework zend je n’ai pas encore essayé).
et j’ai chopé de la tres bonne doc sur le net pour cakephp pour ceux qui veulent pm …[/quote]
Once again, a coté de la plaque. Ça n’a jamais été la question posée a la base, et une fois de plus, tu ramenes tout au python. Tu sais qu’il existe d’autres langages, d’autres frameworks, d’autres technos dehors ? Et ça n’est pas parce que tu ne sais pas les lire que c’est forcément le bordel. Tiens, demain je vais lire un bouquin en japonais, et je dirais que c’est le bordel, c’est pas lisible, en plus c’est écrit verticalement, et pis merde, c’est quand meme mieux les bouquins en français.

Et si t’as de la tres bonne doc pour CakePHP, pourquoi tu files pas le lien ? C’est pas légal ? C’est un ebook pompé en torrent ?

Arrete de tout ramener au Python. C’est cool, tu connais le Python. Maintenant il serait temps d’apprendre a programmer si tu veux qu’on te prenne au sérieux un jour.

La POO facile avec Ravine, bon début de tuto, on tiens un truc là.

Même si la réponse de ravine est un peu abrupte, il a raison dans le fond. J’ajouterai juste que l’idée principale derrière un framework mvc est de respecter le principe de seperation of concern (un jour, je trouverai une traduction), ce qui à mon sens est juste fondamentale pour réussir à faire des applis évolutives et bien branlées sur le long terme.

Après avoir lu ton message Ravine, je suis tombé sur ta signature :

Merci pour la précision :slight_smile:

En tout cas, je suis fan de ta présentation du développement objet !

celui-là n’est pas évident en effet ^^

Séparation d’intérêts/de points de vue/de responsabilité (perso je préfère les intérêts, c’est mon petit côté usurier qui ressort :))

[quote=“eka808, post:7, topic: 38034”]J’ai créé un dossier imgs/ (contenant les images) dans le dossier de cakephp et je n’arrive pas à y accéder depuis mes pages.
Il me dit qu’il n’y a pas de controlleur associé. Comment lui faire comprendre que ce n’est pas un chemin vers un controlleur mais un dossier tout simple ?[/quote]

Heu, tu as sûrement du trouver la réponse depuis, mais bon au cas ou je réponds quant même :).

En fait tu peux placer tes images dans /app/webroot/img et y acceder via www.tonsite.com/img/, sachant que ce dossier webroot contient aussi tout les éléments à inclure dans ta page (donc /css, /js, /files) et sera considéré comme le répertoire racine de ton site pour le public. C’est un peu déroutant au début mais c’est en fait assez “normal”, car ceci permet de créer une espèce de “zone de sécurité” au dela de laquelle l’utilisateur ne pourra pas se promener.

Me semble que personne ne t’a répondu sur ce que peut apporter un moteur de template. Selon moi :

Les plus

  • Séparation de la couche métier et de la couche présentation
  • Plus de facilité de ce fait pour bosser de manière collaborative entre les designers et les développeurs
  • Moins de risques d’effets de bords lorsqu’on veut simplement modifier le look / design / structure d’affichage
  • Favorise la réutilisation du code (tant le code métier que le code de présentation)

Les moins

  • Plus couteux en performance (charge CPU, mémoire). Il y a plusieurs méthode pour faire du template, plus ou moins couteuse en terme de performance. Mais dans tous les cas ça a un coût.
  • Obligation de passer par un système de cache lorsque le site atteint un certain volume
  • Amène de nouvelles problématiques dont il faut tenir compte (comment gérer la mise à jour de la couche présentation lorsqu’on utilise un système de cache.

Les problèmatique que le système de template amène sont souvent déjà prises en compte par les systèmes de moteur de template existants. Par contre pour les perfs, y a pas de miracle, tu y perds. Mais le gain ailleurs dépasse largement cette perte dès lors que ton projet dépasse une certaine complexité.