Je suis actuellement en train de discuter du choix entre PHP en tant que moteur de modèle par rapport à un moteur de modèle en plus de PHP.
Quel est votre choix et pourquoi?
Je dis pourquoi utiliser un autre moteur de modèle lorsque PHP est un moteur de modèle lui-même.
Pour les moteurs de modèle:
Pour plain-php:
Je préfère PHP lui-même si possible. Et la plupart des gens ne veulent pas pirater votre logiciel en créant un thème personnalisé, il est donc facile de faire une lecture rapide et d'enquêter sur sa sécurité. Cela dit , Je suis le "entre gars" qui fait à la fois des modèles et de la programmation, et même des arts graphiques, mes compétences diffèrent d'un programmeur strict et d'un artiste/designer strict.
J'ai trouvé que lorsque j'ai introduit Smarty, il était assez simple d'amener les concepteurs de sites Web à produire du HTML avec des variables Smarty. Les membres de l'équipe de programmation se concentrent désormais sur davantage de travail principal, c'est-à-dire la production du contenu des variables Smarty.
Cela a raccourci le cycle de vie du développement, le travail pouvant être réparti entre plus de personnes, et a finalement conduit à de meilleures conceptions.
Eh bien, c'est juste mon avis, mais les moteurs de modèles sont nuls. Vous devez d'abord comprendre comment le moteur de modèle est implémenté, puis apprendre à l'utiliser. Cela semble juste du temps perdu, car PHP seul le fait mieux et offre beaucoup plus de flexibilité.
Les raisons suivantes s'appliquent:
L'utilisation d'un moteur de modèle peut être utile si un non-programmeur fait les modèles. Dans de nombreux cas, le langage de modèle simplifié peut être plus facile à comprendre pour un non-programmeur que PHP lui-même.
Cela dit, je m'éloigne de l'utilisation de modèles quand ce n'est que moi (ou moi et d'autres développeurs).
PHP n'est pas un moteur de modèle, mais un langage qui peut être utilisé pour écrire des modèles ou des moteurs de modèle. Un moteur de modèle n'est pas seulement un langage, mais aussi l'API de programmation qui permet aux scripts de localiser, d'organiser des modèles ou de leur affecter les données du script. Pure PHP ne vous offre absolument rien - c'est juste un langage. Au lieu de cela, vous devriez prendre de telles bibliothèques, comme Zend_View dans Zend Framework aux comparaisons (en gros, cela fonctionne exactement de la même manière, comme Smarty , sauf qu'il utilise PHP pour écrire des modèles). Vous devez demander si vous devez utiliser un moteur de modèle avec PHP ou autre chose comme langage de modèle.
Quand il s'agit de créer des modèles de langues eux-mêmes, eh bien ... des boucles et des conditions ordinaires suffisent pour écrire des modèles, mais ce "assez" ne signifie pas qu'il est facile, confortable, efficace ou flexible. PHP n'offre rien de spécial pour les concepteurs de modèles, mais de nombreux "langages de modèles" (comme Smarty) ne fournissent qu'un sous-ensemble limité de PHP, donc je ne suis pas surpris que les programmeurs choisissent PHP. Au moins ils peuvent écrire des fonctions et utiliser OOP qui est trop massif pour cela (à mon avis), mais fonctionne et aide vraiment.
Le fait est que les langages de modèles personnalisés ne sont pas limités avec PHP inconvénients, mais leurs concepteurs ne le voient pas inhabituellement, affirmant que "l'affichage de variables et d'une boucle est suffisant". Les zones possibles, où les modèles les langues pourraient être beaucoup plus efficaces:
Des exemples de langages de modèles qui suivent cette voie sont mentionnés ci-dessus PHPTAL et Open Power Template 2. Certaines idées similaires peuvent également être trouvées dans TinyButStrong, mais malheureusement, ce moteur de modèle est extrêmement lent.
PHP en tant que moteur de modèle ne se plaindra pas lorsque vous mélangerez votre syntaxe HTML. Cela vous permettra d'oublier de fermer les balises, de les imbriquer incorrectement, etc.
La sortie de PHP n'est pas échappée par défaut, donc à moins que vous vous souveniez d'ajouter rigoureusement htmlspecialchars()
partout, votre site aura des vulnérabilités d'injection HTML (XSS).
<p>Hello <?= $name ?></b>
<!-- Simple template full of errors -->
Ces problèmes sont bien pires lorsque vous essayez de générer XHTML correctement . Ce n'est pas que vous ne pouvez pas le faire avec plain PHP - bien sûr que vous pouvez - mais cela nécessite plus d'efforts et de diligence.
C'est pourquoi ma recommandation est PHPTAL . OPT2 est OK aussi.
Savant est ce que vous recherchez. C'est une classe Nice wrapper qui vous permet d'utiliser les opérateurs PHP dans vos modèles au lieu d'interpréter un nouveau langage de modèle au-dessus de PHP.
Avantages:
Il est logique de ne pas ajouter de travail supplémentaire au système.
Pas de courbe d'apprentissage pour les développeurs Si vous êtes tous disciplinés, c'est la voie à suivre. (Savant)
Les inconvénients:
Bien que Savant vous encourage à vous séparer correctement, cela n'oblige pas le développeur à séparer la logique métier du code de développement. J'ai une règle qui ne doit jamais être enfreinte. Vous pouvez uniquement générer des variables, utiliser des conditions et des boucles dans vos modèles. Vous ne devez jamais autoriser un développeur à créer des variables dans le modèle. Malheureusement, les développeurs ne semblent jamais le faire, peu importe le nombre de fois que vous leur dites. Ainsi, l'utilisation d'un moteur comme Smarty en vaut la peine car les développeurs sont obligés de séparer complètement les affaires et la conception.
Si je fais un projet pour moi ou un qui n'a pas beaucoup de développeurs, j'ai tendance à utiliser Savant. Si c'est un projet qui est beaucoup plus grand que moi, dans l'Architecture, je choisirai quelque chose comme Smarty.
Quoi qu'il en soit, la séparation dans le code est un temps important que vous utilisez Savant ou Smarty. Je suis sûr qu'il existe également d'autres bonnes options.
PHP convient parfaitement à la plupart des tâches, mais un moteur de modélisation peut aider un projet à évoluer plus facilement.
Ceux du commerce tels que Smarty ou PHPTAL sont excellents si vous n'avez pas le temps de rouler le vôtre (et ne nécessitent pas plus qu’ils n’offrent). De plus, vous pouvez les remplacer/modifier assez facilement avec votre propre implémentation plus tard si vous trouvez que vous avez besoin de quelque chose de plus spécialisé.
J'ai personnellement eu une bonne expérience avec PHPTAL, principalement parce qu'il ne vous gêne pas et qu'il est simple.
L'article suivant résume les différents points de vue sur les moteurs de modèles pour PHP.
Faire PHP modèles du troisième type http://www.tinybutstrong.com/article_3rd_kind.html
J'ai trouvé que la construction d'un moteur de modèle léger en PHP fonctionnait le mieux pour nous. Permet une bonne séparation du code, et notre graphiste pourrait apprendre quelques règles simples à suivre, mais la plupart écrivent HTML/CSS pas PHP. Je peux écrire le code de levage sans avoir à penser à l'interface.
Mon choix pour tout nouveau projet serait probablement d'utiliser simplement les capacités de template de PHP, éventuellement en combinaison avec un framework MVC, au lieu d'utiliser un autre moteur de template. Après tout, pour la simplicité du code ou la propreté de la séparation, peu importe que vous ayez {$myVar}
ou <?= $myVar ?>
dans votre code. Des fonctionnalités de création de modèles plus complexes telles que des conditions, des boucles ou des technologies d'arrière-plan telles que la mise en cache peuvent également être gérées (ou mieux) par PHP ou le framework MVC).
J'ai utilisé les deux approches (avec et sans moteur de modèles), mais uniquement dans des projets personnels, jamais dans des projets d'équipe, donc il y a peut-être des arguments convaincants pour l'utilisation d'un moteur de modèles dans un tel contexte.
Les fonctionnalités de codage PHP ont évolué, les fonctionnalités de conception sont les mêmes, c'est pourquoi si vous travaillez en équipe avec des concepteurs et des développeurs, vous avez besoin d'un moteur de modèle pour paralléliser le travail et laisser les concepteurs travailler avec HTML.
Mon choix personnel est Raintpl, car il est léger, convivial et rapide ici, une référence peut vous aider à choisir (smarty et savant aussi sont sympas!):
PHP n'est pas un moteur de template, c'est un langage de script.
Je ne sais pas si c'est dû à VirtueMart, Joomla ou au concept de modèles en PHP, mais ajuster VirtueMart à votre propre thème graphique est PURE HELL. (Je ne parle pas de style CSS simple.)
J'utilise un moteur de modèle en PHP parce que je préfère avoir un haut degré de séparation entre la logique métier et la logique de présentation. La programmation Web est beaucoup plus facile lorsque votre PHP (ou tout autre langage de programmation) n'a pas de code HTML dispersé. C'est le code de Microsoft derrière qui est si populaire.
J'utilise un moteur de template appelé KudzuPHP. Il s'agit d'un portage de mon KudzuASP pour Classic ASP. Il diffère de nombreux moteurs de modèle en ce que le code qui héberge les règles métier et la logique devient un gestionnaire d'événements pour le moteur de modèle après l'appel du moteur de modèle. Cette approche vous permet de modifier les modèles (déplacement de gros blocs de présentation) sans vous obliger à modifier le code du code PHP.
KudzuPHP contient son propre système de bibliothèque et l'écriture de nouvelles balises d'extension et bibliothèques est très facile.
Vous pouvez trouver KudzuPHP ici: http://www.andrewfriedl.com/downloads/ Si vous voulez une version intégrée dans un Wordpress qui vous permet de coder contre l'API Wordpress sans PHP allez en haut Wordpress.org et recherchez les plugins pour "Kazoo").
J'ai écrit un article de blog à ce sujet récemment.
Pour des raisons de sécurité uniquement, utilisez certainement un moteur de modèle (Twig est sécurisé).
Un bon moteur de template (tel que Twig) offre:
actuellement, il est le plus rapide et le plus facile à utiliser. Après avoir fait une suite de benchmark sur PHP moteurs de modèles, twig vient en deuxième position juste après le langage PHP natif).
Si je devais passer du temps à apprendre un moteur de modèle autonome, je préfèrerais plutôt passer du temps à apprendre un Framework. Mon choix est d'aller avec Zend Framework, qui, lorsqu'il est implémenté en utilisant une approche MVC, vous fournit la puissance du cadre, ainsi que la capacité de création de modèles native de PHP lui-même.
Depuis que j'ai posé cette question, je suis tombé sur moustache . Il s'agit d'un langage de modèle sans logique.
Ce n'est donc pas la même chose que PHP ou smarty où vous avez la possibilité d'ajouter toutes sortes de logique à votre modèle, mais vous oblige à conserver toute la logique dans quelque chose comme des modèles de vue.
Cela me semble une meilleure option que de passer au langage de modèle où la logique est toujours possible.