I have a twig based project with Symfony 2. Due to Symfony 2 nature, Namespaces are used. Because of this i am unable to provide global functions outside of namespace.
This is my Twig Extension class:
<?php
namespace Web\MailBundle\Twig;
use Twig_Extension, Twig_SimpleFilter;
class Twig extends Twig_Extension
{
public function getName()
{
return 'twig_extension';
}
public function getFilters() {
return array(
'shortKey' => new Twig_SimpleFilter('shortKey', 'myCustomFilterFunction')
);
}
public function myCustomFilterFunction() {
//code here...
}
Result:
FatalErrorException: Error: Call to undefined function myCustomFilterFunction()
Why: Because, Twig is trying to find this function but it is inside of a class. If i move it to outside of class this time i face with namespaces. Because it is namespaced.
Research: I digg the codes. Twig do the same thing. They write the filters and functions outside of class. But due to namespace i canno do that. If possible i wanto to do that by using proper solution. If it fails; I will came with the latest solution which is creating another php file without namespace and include it to the project...
--
How can i get over it? Twig Filter has been deprecated and we have to use SimpleFilter method. But i just couldn't get it done.
You can pass a array-based callable as the second parameter to the Twig_SimpleFilter
constructor - in your case, use an array like so:
public function getFilters() {
return array(
'shortKey' => new Twig_SimpleFilter('shortKey', array($this, 'myCustomFilterFunction'))
);
}
which will use your object's method when the filter is used.
See the examples in the Twig documentation.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With