我想将我的表示层与逻辑层分开,但是当我不得不在表示层中循环或检查内容时,我不确定应该做什么?
变量和其他有点静态的内容很容易,我可以做到
<div class='description'><?php echo $product['description']; ?></div>
or
<div class='description'>{{product_description}}</div>
但循环的东西怎么样?
假设我正在创建表中的用户列表。除了在视图中放置foreach并在foreach中打印HTML之外,还有其他方法吗?
<table>
if (!empty($users)) {
foreach ($users as $key => $value) {
echo "<tr data-user-id='$value[id]'>";
echo "<td>$value[id]</td>";
echo "<td>$value[first_name]</td>";
echo "<td>$value[last_name]</td>";
echo "<td><a href='?id=$value[id]&edit=1' class='edit'>Edit</a></td>";
echo "</tr>";
}
}
</table>
这样可以完美地完成,但是我无法克服这样的事实,即它看起来不那么“看得见”了。是否可以让视图更清洁?什么时候我必须添加条件?它变得越来越混乱。
答案 0 :(得分:1)
听起来像是在使视图呈现可读时必须做更多的主要问题。使用PHP模板实现此目的的一种简单方法是使用控制流结构的替代语法。这样做可以使模板看起来更具可读性,例如类似于twig。
使用您的示例:
<table>
<?php if (!empty($users)): ?>
<?php foreach ($users as $key => $value): ?>
<tr data-user-id="<?php echo $value[id]; ?>">
<td><?php echo $value[id]; ?></td>
<td><?php echo $value[first_name]; ?></td>
<td><?php echo $value[last_name]; ?></td>
<td><a href="<?php echo "?id={$value[id]}&edit=1"; ?>" class="edit">Edit</a></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</table>
请注意,我已删除了开放式卷发{
并将其替换为:
。然后在第10行用endif;
关闭。使用foreach重复相同的想法。这是控制结构的替代语法。通常在业务逻辑中您可以使用另一种形式,但是当您需要为视图表示层编写可读模板代码时,这确实很有用。