PHP内部的MVC视图

时间:2015-03-14 11:27:34

标签: php model-view-controller view model

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

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

<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>

这样可以完美地完成,但是我无法克服这样的事实,即它看起来不那么“看得见”了。是否可以让视图更清洁?什么时候我必须添加条件?它变得越来越混乱。

1 个答案:

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