5 Best Template Engines You Can Use in PHP [updated]

By: Sunil Kumar |  In: PHP  |  Last Updated: 2017/09/17

5 Best Template Engines You Can Use in PHP [updated]

The first thing you might be thinking –

Why a templating engine when there is PHP as a templating engine?

Yes, you can use PHP as a templating language But why we do this if more reliable and more lightweight options are available.
For example, for displaying the value of a variable in PHP, we write –

<?php echo $var; ?>

But same can be done with lesser code in other templating languages like Twig, Django just by writing –

  {{ var }}

For printing a single it seems not much different but, when creating a website we have to print thousands of variables and opening and closing thousands of PHP tags is never a recommended way.
PHP is best suited for writing business logic. It should not be mixed with the presentation layer. The business logic determines how data are being created, stored, processed and changed. While presentation layer determines how data are presented to the user in a certain format such as HTML, JSON, XML or some other.
We can see a lot of changes and optimization in PHP from version 5 to 8. All these changes are around improving business logic. I can’t find any significant change in PHP as a templating language and that why I don’t consider it a templating language.
For example, Django introduced template inheritance some years ago, as a way to mimic classes but for templates:

 {% extends "base.html" %}
  {% block header%}
  {% endblock}
  {% block body%}
  {% endblock}
  {% block footer%}
  {% endblock}

It’s elegant, easy to understand, and really powerful. It’s so powerful that many template engines now support this feature out of the box.
As we continue to develop complex web applications which are modeled after the MVC architecture, It is becoming more important to have a wall of separation between back-end logic and front-end logic so that back-end developers and front-end developers can collaborate on the same areas of the website without having to step around each other’s code.
Sandbox mode(To be noted)
This is one of the important features missing in PHP.  and this must-have feature when you are allowing the user to edit templates so that the user has access to a limited set of tags, filters, object methods defined by the developers.
this is not a feature for all but if we allow user o edit templates, this need to be addressed.

Templating engines in PHP

Most of the MVC frameworks have a default templating engine like Symfony has twig and laravel have blade templating engine. But that does not mean this is the only option you get with the MVC. You can integrate any templating engine of your interest with any framework.
Here we are listing the 5 most widely used templating engines based on the usages and popularity.

1. Twig

Fast – Secure – Flexible

Yes, that’s what its official website says.
I can say twig is one of the most popular, fully-featured, and my favorite templating engine. This was initially developed by Armin Ronacher but now maintained by Fabien Potencier(creator of Symfony framework).
Despite being one of the most full-featured PHP templating engines, Twig is also the fastest one. I used this in 2014 for the first time and since then I am loving it.
Some of the top features of twig-
These are some great features of twig which, I think can convenience you to start using twig.

  • Fast – Twig compiles template down to plain optimized PHP code. The overhead compared to regular PHP code was reduced to the very minimum.
  • Secure – Twig has a sandbox mode to evaluate untrusted template code. This allows Twig to be used as a template language for applications where users may modify the template design.
  • Flexible – Twig is powered by a flexible lexer and parser. This allows the developer to define its own custom tags and filters, and create its own DSL(domain-specific language ) targeted at your application. You can override everything, even the core features, by bundling your own tags and filters as an extension.
  • Native template inheritance – We can inherit/extend a template from another template using the extends tag.
  • Solid auto-escaping – Very secure sandbox mode which allows Twig to be used as a template language for applications where users may modify the template design.
  • Template oriented syntax: Twig has shortcuts for common patterns, like having a default text displayed when you iterate over an empty array.
  • Full Featured: Twig supports everything you need to build powerful templates with ease: multiple inheritance, blocks, automatic output-escaping, and much more.
  • Clean Error Messages: Whenever you have an error in your twig template, twig error messages are so specific you can easily find where is the problem.
  • Great Community – As a popular templating engine twig has a great community on StackOverflow and Symfonycasts.

2. Blade

Blade is the simple, yet powerful templating engine provided as a default templating engine with Laravel.  It’s provided with Laravel but that does not mean that you can’t use it with other frameworks.
It is a stand-alone component and you can use it independently. Blade was released in 2011 and risen so fast that it is one of the most used templating engines in PHP.

  • Native PHP code – Unlike other popular PHP templating engines, Blade does not restrict you from using plain PHP code in your views.
  • Template Inheritance – We can inherit/extend a layout using the extends keyword.
  • No sandbox mode – Blade
  • Auto escaping – Like Twig Blade also supports an auto escape mechanism(will escape the HTML tags in content) to safely render the views.
  • Security – Blade doesn’t actually differ so much from plain PHP. It makes it easier to properly escape variables, but it doesn’t place any restrictions. Twig, on the other hand, works in a separate context. All functions and filter calls are restricted by the functions you explicitly enable (besides the built-in functions).
  • Performance – Blade is considered a bit faster than Twig because Twig compiled code is a bit more complicated but at the end, both are complied to the plain PHP code. So the performance difference is negligible.

By now we have discussed the 2 most popular templating engines in PHP. Both Blade and Twig provide the most important features; template inheritance, auto escaping, clear syntax but Blade does not add much extra functionality while Twig take is a step further by adding more security, adding sandbox feature. The choice mostly depends on your personal preference.
You can also check this great discussion over Blade vs. Twigas well.

3. Smarty


Recently Smarty has been changing and adapting aggressively to better suit everyone’s needs and take advantage of new things in PHP core. As the twig, Smarty focuses on the templating and lesser the code. Smarty uses simple syntax {tag} which is designed especially for presentation.

  • Templating inheritance – Like any other engine, Smarty added template ingeritance to its feature list in Smarty 3 to easily manage and reuse the template code.
  • Compilation – One of the best feature of Smarty is that it avoids parsing overhead of the template, rather it is compiled only once. Compilation happens once when each template is first invoked, and then the compiled versions are used from that point forward. Smarty takes care of this for you, so the template designer just edits the Smarty templates and never has to manage the compiled versions.
  • Built in caching – To speed up calls to fetch() and display() functions, Smarty has the built-in support for caching.
  • Sandboxing – Smarty insulates the templates from PHP, creating a controlled separation of presentation from business logic. Smarty also has security features that can further enforce granular restrictions on templates. This is useful if you have third parties editing templates, and you don’t want to unleash the full power of PHP or Smarty to them.
  • Portability – Since Smarty templates are language-agnostic, they can easily be compiled to other languages (such as javascript) with a different compiler, and the familiar syntax can also be ported to other programming languages.

If you want to start with Smarty, it provides a crash course where you can get a good overview how Smarty is typically implemented in a PHP application.
We can say smarty is not so much popular but it has all the features which makes it a great templating engine.

4. Mustache

Mustache can be used for HTML, config files, source code – anything. It works by expanding tags in a template using values provided in a hash or object.
We call it “logic-less” because there are no if statements, else clauses, or for loops. Instead there are only tags. Some tags are replaced with a value, some nothing, and others a series of values.
Also Read:

How You can write Super-Fast HTML with Sublime text

5. Volt


Volt is an ultra-fast and designer-friendly templating language written in C for PHP. Volt is highly integrated with other components of Phalcon, just as you can use it as a stand-alone component in your applications.
Volt is inspired by Jinja, originally created by Armin Ronacher. The syntax of volt is very similar to twig syntax. volt has a very clean, informative documentation.
But the main fallback of volt is you can’t decouple it from Phalcon entirely. So if you want to use volt with other frameworks, you can’t. You could fall back on the Twig templating engine which seems to be the closest match language wise as well as completely standalone.
Also Read:

How You can write Super-Fast HTML with Sublime text

Conclusion

As a framework-independent technology, Twig is a templating engine which can be adapted easily and independently. Twig is feature-rich, easily customizable and perfectly documented.
I am feeling great by using it. And if you are familiar with other templating engines you can easily start with twig because the syntax is similar to other engines.

Comments


  • Hi Sunil, good article, thanks for sharing. One remark: Volt can be used in standalone mode, the only Phalcon dependency is the declaration of the DI, but once it is registered, you can send any data to the template. It’s very fast.

  • Smarty is pretty dumb and needs arrays as input. There is no automatic search for getters and objects not usable. Concerning any framwork DTOs seem being required if you want to write clean code. Haven’t tested the rest of this list, so I can’t compare here.
    Using fluid (for Flow, Neos and TYPO3) I know a much more comfortable template engine.

  • I do not know if it’s just me or if perhaps everyone else encountering
    problems with your website. It looks like some of the written text within your posts are running off
    the screen. Can someone else please comment and let me know if this is happening to them too?
    This might be a problem with my web browser because I’ve had this happen previously.
    Many thanks

  • Leave a Comment

    Your email address will not be published.

    *


    Sunil Kumar


    I am the owner of acmeextension. I am a passionate writter and reader. I like writting technical stuff and simplifying complex stuff.
    Know More

    Join more than 10,000 others Web Developers