twig

Теги: twig php

Как установить 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 %}