使用Twig显示PHP对象参数

时间:2016-10-21 17:01:27

标签: php templates twig

我正在努力摆脱PHP中的硬编码HTML。我在基本的Twig模板上取得了一些成功,但我正在努力使用PHP对象。我尽可能地简化了事情,但仍然存在显示PHP对象参数的问题。希望,我只是犯了一个愚蠢的错误,但我花了很多时间在这上面。如果我删除我的对象并使用数据填充数组,它可以正常工作。

我在twig文档中读到这篇文章,这让我认为它应该有效:

•检查foo是否为数组并禁止有效元素;

•如果没有,如果foo是一个对象,请检查该栏是否为有效属性;

PHP:

<?php
    require_once ('../vendor/twig/twig/lib/Twig/Autoloader.php');

    Twig_Autoloader::register();
    $loader = new Twig_Loader_Filesystem($_SERVER["DOCUMENT_ROOT"].'test/templates/');$twig = new Twig_Environment($loader, array(
        'cache' => './tmp/cache',
    ));
    $template = $twig->loadTemplate('test.phtml');

    $obj = new Person();

    $obj->fName = 'firstName';
    $obj->lName = 'lastName';

    $template->display(array($obj));


    class Person{

        public $fName;
        public $lName;

    }

?>

模板

<html>
    <head><title>Twig template!</title></head>
    <body>

        Person
        <ul>
        {% for person in obj %}
            <li>{{ person.fName }} {{ person.lName }}</li>
        {% endfor %}
        </ul>
    </body>
</html>

如果我执行var_dump,我可以看到我的对象并设置了参数。如果我使用

手动回复参数
echo $obj->fName;

它返回预期值。模板正确显示在浏览器窗口中,但Twig部分为空白。

在浏览器中生成HTML:

<html>
    <head><title>Twig template!</title></head>
    <body>

        Persons
        <ul>
                </ul>
    </body>
</html>

感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

尝试传递obj数组引用。试试这个:

$template->display(array('obj' => array($obj)));

而不是:

$template->display(array($obj));

希望这个帮助