Ответ 1
Вам нужны functions или filters. Вы можете легко добавить их, используя примеры.
В PHP-шаблонах я могу использовать php-функции, например:
foreach ($users as $user){
echo someFunction($user->getName());
}
Как я могу сделать это в TWIG?
{% for user in users %}
* {{ user.name }}
{% else %}
No user have been found.
{% endfor %}
Как мне это достичь?
Вам нужны functions или filters. Вы можете легко добавить их, используя примеры.
// $twig is a Twig_Environment instance.
$twig->registerUndefinedFunctionCallback(function($name) {
if (function_exists($name)) {
return new Twig_SimpleFunction($name, function() use($name) {
return call_user_func_array($name, func_get_args());
});
return false;
}
});
В шаблоне ветки:
{{ explode(",", "It raining, cats and dogs.").0 | raw }}
это выведет "Дождь". По умолчанию возвращаемые значения сбрасываются в Twig.
Twig_SimpleFunction - предпочтительный класс для использования. Все другие связанные с функциональностью классы в Twig устарели с 1.12 (для удаления в 2.0).
В контроллере Symfony2:
$twig = $this->get('twig');
Существует уже расширение Twig, которое позволяет вам вызывать функции PHP из ваших шаблонов Twig, например:
Hi, I am unique: {{ uniqid() }}.
And {{ floor(7.7) }} is floor of 7.7.
См. официальный репозиторий расширений.
Если вы работаете в symfony 2, это также поможет. Концепция такая же, но вы помещаете код в другое место и форматируете его несколько иначе.
http://symfony.com/doc/2.0/cookbook/templating/twig_extension.html