我有一个基本的Feed设置我正在努力工作。
我有一个页面从数据库中获取一系列项目并循环遍历它们。然后它包含项目的模板,在项目中我想从每个循环的项目中填充它。
我遇到的问题是项目模板中没有定义项目,只是在包含模板的页面中。
我看过一些帖子说项目模板中仍然可以访问变量的范围,但我得到的变量未定义的典型错误。我在做错了什么或不在这里理解?
页:
<div>
<?php
$items=Feed::getItems();
foreach ($items as $item) {
includeTemplate("item.php");
}
?>
</div>
模板:
<div>
echo $item->title;
</div>
答案 0 :(得分:1)
如果您想保留当前范围, CAN NOT 使用自定义函数包含模板,因为它会改变范围。
所以,你可以这样做:
include "item.php"; // using built-in include
或者更好的是,不要依赖范围,只使用自定义函数传递相关参数:
includeTemplate("item.php", $item); // passing $item as parameter
答案 1 :(得分:1)
这里的问题可能是includeTemplate
功能。
使用include
,范围保持不变(想象它就像你只是将代码从文件复制到包含的位置),但是因为你有一个功能,你是对的 - 它正在改变范围。
你能做些什么?最简单的方法是改变这样的功能:
includeTemplate($template, array $vars=[]) {
extract($vars);
// .. the rest of the function
}
然后这样称呼:
$items=Feed::getItems();
foreach ($items as $item) {
includeTemplate("item.php", compact("item"));
}
这使用extract(),它接受一个关联数组并将其转换为变量,并使用相反的函数compact(),该函数获取变量名称列表,并将其转换为关联数组