In PHP template engine, Twig there are various inbuilt awesome filters using that anyone can write large apps in less no. of lines like
{% for user in users %} //write code based on user {% else %} //you can add else condition in for array which will work is users is blank {% endfor %}
and various others filter too but these are limited and various default PHP function are not available in Twig then how can we use those ? For those cases Twig provide ways so that you can add your custom filters/ extension. I am going to show you how.
First – Create your custom extension class extending class \Twig_Extension
<?php namespace Webkul\DemoBundle\Twig; class DemoExtension extends \Twig_Extension { //here we will write code //two functions are necessary // 1st - getFilters() where you declare all your custom extensions // 2nd - getName() for your Extension class name }
It’s basic requirement is to declare two functions getFilters() and getName() so we add those here. In getFilters() function we declare our all custom filters/ extensions and in getName() function we add this class name (any name).
<?php namespace Webkul\DemoBundle\Twig; class DemoExtension extends \Twig_Extension { /** * Here we declare our custom filter with their respective function */ public function getFilters() { return array( new \Twig_SimpleFilter('addslashes', array($this, 'addslashes')), new \Twig_SimpleFilter('utf8_decode', array($this, 'utf8_decode')), new \Twig_SimpleFilter('json_decode', array($this, 'json_decode')), new \Twig_SimpleFilter('urldecode', array($this, 'urldecode')), //here first urldecode is name which we use in twig and 2nd one is with refer to function written in this class ); } /** * add slash on string */ public function addslashes($string) { return addslashes($string); } /** * utf8 decode string */ public function utf8_decode($string) { return utf8_decode($string); } /** * json decode string */ public function json_decode($string) { return json_decode($string); } /** * urldecode string */ public function urldecode($string) { return urldecode($string); } /** * {@inheritdoc} */ public function getName() { return 'twig_extension'; } } ?>
So we created a class with various custom functions now we have to just notify Symfony about these filters/ extensions. We do it after declaring this in our service.
services: webkul.twig_extension: class: Webkul\DemoBundle\Twig\DemoExtension tags: - { name: twig.extension }
That’s it our Custom filters/ extensions are ready to use. We can use these like Twig default once.
{{ "Webkul's Awesome Symfony Twig Blog"|addslashes }}
Framework used – Symfony 2.7
Be the first to comment.