我正在努力摆脱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>
感谢任何帮助。
答案 0 :(得分:1)
尝试传递obj
数组引用。试试这个:
$template->display(array('obj' => array($obj)));
而不是:
$template->display(array($obj));
希望这个帮助