我仍然在努力证明模板系统的合理性。为什么我不应该只发出HTML?

时间:2012-08-02 17:01:20

标签: php template-engine

我真的不明白这些之间的区别。模板如何变得更好?我不会理解它或者如何说服某人使用它我一起工作。我理解&#34;分离&#34;关注,但我没有遇到大问题。我不是第一个生成多个<li>标签的示例就像echo那样吗?并且,我会使用php作为&#34;模板语言,&#34;所以我不关心Smarty或其他系统。感谢。

Why should I use templating system in PHP?

<h1><?=$title?></h1>
<ul>
  <?php foreach ($items as $item) {?>
  <li><?=$item?></li>
  <?php } ?>
</ul>

和(我在一个论坛中找到的一些代码片段):

echo "<table>";

for ($i = 0; $i < $largestArray; $i++)
{
        echo "<tr>";

        if ($i < $array1Size)
        {
                echo "<td>";
                echo $array1[$i];
                echo "</td>";           
        }
        else
        {
                echo "<td>";
                echo "null";
                echo "</td>";           
        }

        if ($i < $array2Size)
        {
                echo "<td>";
                echo $array2[$i];
                echo "</td>";           
        }
        else
        {
                echo "<td>";
                echo "null";
                echo "</td>";           
        }

        echo "</tr>";
}

echo "</table>";

或类似的东西:

<table id="working" border="0" cellspacing="1" cellpadding="3">
    <tr>
        <?php foreach ($csv->titles as $value): ?>
            <td><?php echo $value; ?></td>
        <?php endforeach; ?>
    </tr>

    <?php foreach ($csv->data as $key => $row): ?>
        <tr>
            <?php foreach ($row as $value): ?>
                <td><?php echo $value; ?></td>
            <?php endforeach; ?>
        </tr>
    <?php endforeach; ?>
</table>
编辑:这应该是社区维基问题吗?

3 个答案:

答案 0 :(得分:1)

你的身份似乎有些混乱,但重点是第二个版本是可读的(你可以轻松阅读标签层次结构,例如)。可读代码是一种易于维护或重构的代码。

仅使用PHP的echo关键字编写下面的代码就不太可读了。你也会关注引号和双引号。使用类似模板的方法,最终得到的代码看起来与HTML文档类似。

<table id="working" border="0" cellspacing="1" cellpadding="3">
    <tr>
        <?php foreach ($csv->titles as $value): ?>
            <td><?php echo $value; ?></td>
        <?php endforeach; ?>
    </tr>
    <?php foreach ($csv->data as $key => $row): ?>
        <tr>
            <?php foreach ($row as $value): ?>
                <td><?php echo $value; ?></td>
            <?php endforeach; ?>
        </tr>
    <?php endforeach; ?>
</table>

答案 1 :(得分:0)

像cakephp和codeignitor这样的模板系统使用MVC,它可以使代码更清晰,更符合标准。你也可以编写自己的MVC。

答案 2 :(得分:0)

模板系统不是分离表示逻辑的最终解决方案。它们是 解决方案,也是许多PHP框架使用的解决方案。在一般的“MVC”/ MVA / MVP / MVVM PHP开发中,您不希望表示层中有任何业务逻辑。回应HTML是(通常)直接违反这种做法;使用模板,表示层中不存在业务逻辑,反之亦然。

回到第一点,模板是 解决方案,而不是 解决方案。表示层有很多选项,主要取决于您的编码风格和/或框架/库使用情况。

在个人层面上,我更喜欢模板(对于大多数小型医疗项目而言),其原因超出了上述内容:

  1. 制作“主题”并更轻松地交换网站样式。只需修改模板或实现可以加载不同模板的主题切换器

  2. 从模型转到模板是一件轻而易举的事,因为模板(通常)只是HTML,其中有一些php片段回显数据。

  3. 模板“愚蠢”。他们不需要了解业务逻辑中发生的任何事情,他们所关心的只是将一些数据反映到HTML中。

  4. 可读性。这个几乎完全是个人偏好,特别是考虑到各种各样的模板语法。

  5. tl; dr - 模板与[在此处插入其他解决方案]几乎完全是主观的,除非您有基于托管,客户要求,流量水平等的约束。如果是这种情况,那么找到基准,更多关于效率和可扩展性,并根据项目的要求做出明智的决定。