【问题标题】:PHP inside MVC's viewMVC 视图中的 PHP
【发布时间】:2015-05-16 21:17:09
【问题描述】:

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

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

<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 model-view-controller view model


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

    【讨论】:

    • 与我想的风格相比,这实际上更具可读性。谢谢!
    猜你喜欢
    • 2013-05-11
    • 1970-01-01
    • 1970-01-01
    • 2010-12-25
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多