MVC 视图中的 PHP


PHP inside MVC's view

我想将表示层与逻辑层分开,但我不确定当我必须循环或检查表示层中的内容时应该怎么做?

变量和其他有点静态的内容很容易,我可以做

<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中重复。这是控制结构的替代语法。通常在业务逻辑中,您会使用另一种形式,但是当您需要为视图表示层编写可读模板代码时,这确实会有所帮助。