我想将表示层与逻辑层分开,但我不确定当我必须循环或检查表示层中的内容时应该怎么做?
变量和其他有点静态的内容很容易,我可以做
<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>
这将工作得很好,但我无法克服它看起来不再那么"有观点"的事实。是否有可能使视图更干净?当我必须添加条件时怎么办?它变得越来越混乱。
听起来像是
您在使视图演示文稿可读性方面必须做更多工作的主要问题。使用 PHP 模板实现此目的的一种简单方法是使用控制流结构的替代语法。这样做可以使模板看起来更具可读性,例如类似于树枝。
使用您的示例:
<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中重复。这是控制结构的替代语法。通常在业务逻辑中,您会使用另一种形式,但是当您需要为视图表示层编写可读模板代码时,这确实会有所帮助。