Проверка определенного и логического значения ряда переменных в ветке, если они условны - PullRequest
0 голосов
/ 25 июня 2018

Есть ли более элегантный способ проверить, определена ли переменная в Twig (безопасно для ссылки / использования), а также проверить логическое значение, как я делаю ниже?

У меня есть номерШаблоны Twig, в которых есть грязная логика, вот так, и я бы предпочел, чтобы они были более читабельными, однако я не знаю, как это делается в Twig.

{% if primaryMethod is defined and paymentInProgress is defined and transactions is defined and not primaryMethod and not paymentInProgress and not transactions %}

1 Ответ

0 голосов
/ 25 июня 2018

Вы можете написать свой собственный тест, чтобы уменьшить количество необходимого кода Twig. Это довольно просто сделать и требует всего 2 шага:

  1. Сначала зарегистрируйте свой test в twig (либо напрямую, либо используйте метод getTests в своем twig extension

    $twig->addTest(new \Twig_SimpleTest('false', null, [ 'node_class' => '\MyProject\Twig\Node\FalseExpressionNode' ]));

  2. Создать тест

    <?php
    namespace MyProject\Twig\Node;
    
    class FalseExpressionNode extends \Twig_Node_Expression_Test_Defined {
        public function compile(\Twig_Compiler $compiler)
        {
            $compiler->subcompile($this->getNode('node'))
                     ->raw('&& $context[\''.$this->getNode('node')->getAttribute('name').'\'] === false');
        }
    }
    

Тогда вы можете использовать свой тест внутри twig

{% if primaryMethod is false and paymentInProgress is false and transactions is false %}

sidenote: тест FalseExpressionNode распространяется с Twig_Node_Expression_Test_Defined, чтобы подавить любые неопределенные сообщения о переменных, когда twig находится в режиме отладки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...