Het is altijd een veel voorkomende discussie. Wel of geen template parser gebruiken in PHP. Voor beide kampen zijn er goede argumenten. Uiteindelijk hangt de keuze heel erg af van je eigen voorkeur en wat je precies wil bereiken.
== PHP als template parser ==
Het is met PHP goed mogelijk om HTML en PHP code te combineren. Op deze manier kan je PHP ook gewoon als template parser gebruiken. Dit heeft een aantal voordelen:
- Het is razend snel. Je hebt geen overhead van een template parser
- Je hoeft geen nieuwe taal te leren
- Je krijgt nette color coding in je editor
Helaas zijn er ook wat nadelen:
- Je gaat snel te veel in je templates doen. Je moet dus behoorlijk veel discipline hebben
- Je kan geen code blokkeren
- Voor designers is de leercurve hoger
- Sommige dingen zijn in PHP gewoon behoorlijk ingewikkeld te bereiken. Denk hierbij aan dingen als auto escaping en template overerving.
Een deel van deze problemen zijn natuurlijk op te lossen door speciale functies te schrijven die je in je templates kan gebruiken.
== Wel een template parser gebruiken ==
Gezien de grote hoeveelheid template parsers beschikbaar in PHP, zijn er dus kennelijk ook genoeg redenen om ze te gebruiken. Dat is dan ook zo. Een template parser heeft een aantal voordelen namelijk ten opzichte van PHP gebruiken:
- Een template parser kan auto escaping doen. Dit betekent dat zonder anders aangegeven alles wat weergegeven wordt gestript wordt van HTML. Op deze manier heb je minder snel XSS bugs
- Een template parser kan in een sandbox modus draaien. Je kan voorkomen dat bepaalde codes uitgevoerd worden
- De leercurve voor designers is lager. Ze hoeven namelijk geen PHP te leren, maar hoeven alleen de eenvoudigere taal te leren
- Je kan functionaliteit implementeren die in PHP templates heel lastig na te bootsen is. Zoals template overerving!
- Je dwingt een duidelijke scheiding tussen de weergave en je business logic af
Nadelen van template parsers zijn:
- Je moet als je alleen programmeert een extra taal leren. Meestal zal dit echter geen probleem hoeven op te leveren.
- Ze zijn trager dan PHP zelf
=== Twig ===
Zelf gebruik ik tegenwoordig altijd een template parser. Namelijk twig. Hier heb ik een aantal redenen voor:
- Twig is heel eenvoudig. Zeker vergeleken met de bekendere template parsers in PHP zoals Smarty
- Twig ondersteunt template extensie. Dit is een must voor mij. Je kan een base template definieren. Hierin geef jebepaalde blocks aan. Vervolgens kan je vanuit een andere template deze base template overerven en de blocks overschrijven. Zo hoeft mijn code alleen maar een specifieke template te laden voor dat stuk code. De template gaat vervolgens zelf de base template overerven zonder dat mijn code hiervan af te weten. Dit maakt mijn code dus heel erg simpel
- Goede caching. Alle templates worden gecompileerd naar PHP waardoor ze razend snel zijn. De code die Twig bij het compileren genereert is behoorlijk duidelijk en overzichtelijk
- Auto escaping. Nog een must voor mij. Zeker als je met designers werkt. Alle variabelen die ik binnen mijn template gebruik worden geescaped. Ik hoef dus geen htmlspecialchars() of iets dergelijks te doen. Mocht je dit niet willen is het mogelijk om dit per variabele expliciet aan te geven. Dan zal je het alleen zelf moeten doen.
- Zeer duidelijke template syntax. Één van de beste die ik tot nu toe gezien heb
- Heel eenvoudig uit te breiden. Twig is heel eenvoudig opgezet waardoor het eenvoudig is om zelf commando's toe te voegen. Zonder dat je helemaal in de code moet gaan hacken. Tot nu toe heb ik alles wat ik wilde kunnen bereiken met Twig.
Punt echter, blijft wel dat de overhead en leercurves hoger liggen voor Twig, Smarty en anderen vergeleken met de simpele template engines.
Als je het niet probeert kan je ook nooit erover oordelen. Hoe weet je bijv. dat de leercurve hoger is dan bij "simpelere" template parsers als je het niet uitprobeert?
Mijn ervaring is als volgt:
- Jou "simpelere" template parsers kunnen maar heel weinig waardoor ze onbruikbaar worden omdat je allerlei dingen in je business code moet gaan doen die eigenlijk met de weergave te maken hebben. Daarnaast zijn ze vaak nog trager ook
- De overhead van Twig ligt lager omdat deze parsers geen caching en compiling geburiken.
Het is even een investering, maar als je een CMS wil bouwen, moet je sowieso wel wat PHP kennis hebben en moet dat echt geen probleem opleveren. Daarnaast vond ik zelf Twig super eenvoudig te implementeren. De documentatie is zeer goed en als je gewoon de code daaruit exact kopieert werkt het al.