Twig x2.5 - шаблон / php фильтр - PullRequest
0 голосов
/ 27 октября 2018

Я беру на себя проект, который использовал Twig v1, и я перехожу на v2.5, практически не зная Twig до сих пор .... так что будьте милы:)

Пожалуйста, взгляните и дайте мне знать, если я что-то упустил. Я могу пропустить любой из фильтров, и он работает, но я хочу знать, почему это не так.

Вот сообщение об ошибке, которое я вижу:

<b>Fatal error</b>:  Uncaught ReflectionException: Function () does not exist in D:\xampp\htdocs\project\includes\Twig\Node\Expression\Call.php:288
Stack trace:
#0 D:\xampp\htdocs\project\includes\Twig\Node\Expression\Call.php(288): ReflectionFunction-&gt;__construct('')
#1 D:\xampp\htdocs\project\includes\Twig\Node\Expression\Call.php(23): Twig_Node_Expression_Call-&gt;reflectCallable(NULL)
#2 D:\xampp\htdocs\project\includes\Twig\Node\Expression\Filter.php(32): Twig_Node_Expression_Call-&gt;compileCallable(Object(Twig_Compiler))
#3 D:\xampp\htdocs\project\includes\Twig\Compiler.php(84): Twig_Node_Expression_Filter-&gt;compile(Object(Twig_Compiler))
#4 D:\xampp\htdocs\project\includes\Twig\Node\If.php(46): Twig_Compiler-&gt;subcompile(Object(Twig_Node_Expression_Filter))
#5 D:\xampp\htdocs\project\includes\Twig\Node.php(82): Twig_Node_If-&gt;compile(Object(Twig_Compiler))
#6 D:\xampp\htdocs\project\includes\Twig\Compiler.php(84): Twig_Node-&gt;compile(Object(Twig_Compiler))
#7 D:\xampp\htdocs\project\includes\Twig\Node\Block.php(34 in <b>D:\xampp\htdocs\project\includes\Twig\Environment.php</b> on line <b>570</b>

На странице среды Twig я вижу, что в них включена фильтрация для сценариев PHP:

$twig->addFilter('is_array', new Twig_Filter_Function('is_array'));

Я обновил это для v2 как:

$twig->addFilter(new Twig_Filter('is_array'));

Оттуда я вижу в шаблоне, где is_array применяется к массиву вложений:

    {% if attachments|is_array %}
<div class="knowledgebasearticleattachment">{{ LANG.ATTACHMENTS }}</div>
    {% for attachment in attachments %}
    <div><span class="knowledgebaseattachmenticon"></span> <a href="{{ attachment_url }}{{ attachment.id }}" target="_blank">{{ attachment.name }} ({{ attachment.filesize }})</a></div>

    {% endfor %}
{% endif %}

Переменная вложения определяется как массив в контроллере:

$q = $db->query("SELECT * FROM ".TABLE_PREFIX."attachments WHERE article_id=".$article['id']);
        while($r = $db->fetch_array($q)){
            $attachments[] = $r;
        }
        $template_vars = array();
        $template_vars['attachments'] = $attachments;

1 Ответ

0 голосов
/ 27 октября 2018

Разобрался.Я сделал простую ошибку, которая теперь очевидна для меня.Мне нужно определить имя фильтра Twig вместе с функцией PHP, с которой он связан:

$twig->addFilter(new Twig_SimpleFilter('is_array','is_array'));
$twig->addFilter(new Twig_SimpleFilter('is_numeric','is_numeric'));
$twig->addFilter(new Twig_SimpleFilter('print_r','print_r'));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...