Как установить twig?
composer require twig/twig
Как подключить twig?
$loader = new Twig_Loader_Filesystem('./templates');
$twig = new Twig_Environment($loader, array(
'cache' => './cache',
// 'debug' => true,
));
$template = $twig->load('index.html.twig');
echo $template->render();
Как добавить глобальную переменную?
$twg->addGlobal('siteName', 'Тест');
Как добавить кастомные функции, проверки, фильтры?
/**
* Class MyTwigExtension
*/
class MyTwigExtension extends \Twig_Extension
{
/**
* @return array
*/
public function getTests()
{
return array(
new \Twig_SimpleTest('instance_of', array($this, 'isInstanceOfTest'))
);
}
/**
* @return array
*/
public function getFunctions()
{
return array(
new \Twig_SimpleFunction('get_url', array($this, 'getUrlFunction')),
);
}
/**
* @return array
*/
public function getFilters()
{
return array(
new \Twig_SimpleFilter('filter_var', array($this, 'filterVarFilter'))
);
}
/**
* @param object $object
* @param string $className
* @return bool
*/
public function isInstanceOfTest($object, $className)
{
return $object instanceof $className;
}
/**
* @param $id
* @return string
*/
public function getUrlFunction($id)
{
return sprintf('?id=%s', $id);
}
/**
* @param string $value
* @param string $constantName - FILTER_SANITIZE_NUMBER_INT, FILTER_SANITIZE_EMAIL...
* @return mixed
*/
public function filterVarFilter($value, $constantName)
{
return filter_var($value, constant($constantName));
}
}
$twig->addExtension(new MyTwigExtension);
Как разделить список на колонки?
{% for row in articles|batch(2) %}
<div class="row">
{% for article in row %}
<div class="col-md-6">
// your content
</div>
{% endfor %}
</div>
{% endfor %}