web-dev-qa-db-fra.com

PHP vs moteur de modèle

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.

60
Ikke

Pour les moteurs de modèle:

  1. Sécurité supplémentaire pour la personnalisation de l'utilisateur final. Les thèmes en pur PHP ont une capacité illimitée de nuire à un utilisateur et à son installation. Ainsi, un moteur de modèle supprime ce risque, s'il est bon.
  2. Facilité d'utilisation pour les non-programmeurs, comme les graphistes ou les concepteurs de sites Web.

Pour plain-php:

  1. La vitesse de pure PHP ne peut être égalée par aucun moteur de modèle construit au-dessus.
  2. La puissance complète de PHP est disponible pour la sortie, et pas seulement une partie interprétée ou filtrée.

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.

48
Robert K

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.

38
stuart

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é.

24
rogeriopvl

Les raisons suivantes s'appliquent:

  • La séparation de votre application en modèles avec un moteur rend votre application moins vulnérable aux arrêts de code
  • L'utilisation de modèles peut vous donner une plus grande flexibilité à l'avenir lors de la refactorisation, car l'espace de noms ne sera pas directement intégré à l'application
  • L'utilisation de modèles encourage (force) les développeurs à garder la logique métier et le code HORS de la couche de présentation.
  • À l'aide de modèles, il est plus facile de simuler des ensembles de données et de les transmettre à un moteur de modèle et d'obtenir un aperçu de l'apparence du site avec les données
14
cgp

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).

10
Mark Biek

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:

  • Affichage et rendu des formulaires (je n'ai vu aucun framework avec PHP comme langage de template qui fournissait un système simple, flexible et générique pour personnaliser l'apparence du formulaire).
  • Comprendre la structure du document HTML/XML.
  • Filtres d'injection XSS automatiques.
  • Résolution de divers problèmes courants dans la couche de présentation (c'est-à-dire personnalisation de l'apparence du système de pagination, affichage des données dans des colonnes, etc.)
  • Portabilité des modèles et vrai séparation de la logique d'application et des détails d'implémentation des modèles.

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.

10
Zyx

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.

6
Kornel

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.

5
Derek Organ

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.

5
seanhodges

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

3
Skrol29

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.

3
acrosman

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.

2
Daan

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!):

http://www.raintpl.com/PHP-Template-Engines-Speed-Test/

1
RainElemental

PHP n'est pas un moteur de template, c'est un langage de script.

1
Toby Allen

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.)

1
Yaroukh

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").

0
Andrew

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:

  • Sécurité (le plus important quoi que ce soit)
  • Pas verbeux (comme php)
  • Plus de fonctionnalités de modèles
0
Petter Kjelkenes

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).

0
skonsoft

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.

0
PHPexperts.ca

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.

0
Ikke