Twig扩展:使用变量呈现模板

3
我创建了一个Twig扩展程序,用于呈现带有一些变量的视图,但是我遇到了以下错误。
An exception has been thrown during the rendering of a template ("Notice: Array to string conversion") 
in :Backend\twig:activate.html.twig at line 1.

这是Class扩展:
namespace AppBundle\Twig;

class ActivateExtension extends \Twig_Extension
{
    public function getFilters()
    {
        return array(
            new \Twig_SimpleFilter('activate', array($this, 'booleanFilter'), array('is_safe' => array('html'),
                'needs_environment' => true)),
        );
    }

    public function booleanFilter(\Twig_Environment $twig, $var1, $var2)
    {

        return $twig->render(':Backend/twig:activate.html.twig', array(
            'var1' => $var1,
            'var2' => $var2
        ));
    }

    public function getName()
    {
        return 'activate_extension';
    }
}

这是要呈现的视图:
//test
{{ var1 }}<br>
{{ var2 }}

这就是在另一个视图中调用过滤器的方式:

{{ entity.activate|activate('test var1', 'test var2') }}

2
可能最好定义一个twig_function而不是一个filter:filter将要过滤的元素作为参数,因此函数的输入是entity.activate而不是'test var1','test var2' - Matteo
1
啊,好的,我会尝试的,谢谢。 - hous
嗨@hous,不必开发一个函数而不是过滤器,可以阅读我在文档中发现的答案。对于错误感到抱歉。 - Matteo
1个回答

3

参考TWIG开发者指南有关过滤器的内容:

当Twig调用PHP可调用函数时,左侧过滤器(|之前)作为第一个参数接收,括号内()传递给过滤器的额外参数作为额外参数。

因此,php函数的第一个参数是entity.activate的值,可能是错误数组,然后将其他参数作为参数传递。例如,您应该按以下方式更改过滤器:

public function booleanFilter(\Twig_Environment $twig, $activate, $var1, $var2)
{

    return $twig->render(':Backend/twig:activate.html.twig', array(
        'var1' => $var1,
        'var2' => $var2
    ));
}

希望这有所帮助。对于我关于twig函数的评论感到抱歉。

非常感谢。 - hous

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接