8

我刚刚重新格式化了我的 CakePHP 应用程序的默认布局。我通过将几乎所有内容都放在 html 辅助方法中来消除尽可能多的内联 html。

这很有趣,但我想知道我从这个练习中获得了什么好处,如果有的话?

<?php
    $output = implode("\n", array(
        $html->docType(),
        $html->tag('html', implode("\n", array(
            $html->tag('head', implode("\n", array(
                $html->charset(),
                $html->tag('title', 'Title For App'),
                $html->css('css', NULL, array('media' => 'screen,print')),
                $html->css('print', NULL, array('media' => 'print')),
                $html->script(array('cufon', 'jquery','external'))
            ))),
            $html->tag('body', implode("\n", array(
                $html->tag('div', $content_for_layout, array('id' => 'wrapper')),
                $html->scriptBlock('Cufon.now();')
            )))
        )), array('xmlns' => 'http://www.w3.org/1999/xhtml'))
    ));
    echo $output;
?>

我想至少它看起来不错且紧凑,而且可读性很好。在这种情况下我应该注意哪些陷阱?我应该注意任何速度问题吗?

我喜欢它——我不喜欢。

我想我需要以一种或另一种方式说服。

如果您想知道,查看源代码时,内爆会在 html 中放置漂亮的换行符。

4

5 回答 5

10

几年前,我在 Google 小组中进行过讨论。最终,您会意识到,在您需要以编程方式操作内容之前,您采用哪种方式并没有太大的不同——然后,如果您采用 HTML 路线,您会发现您的代码中充满了<?php&?>或字符串连接或双引号变量替换。

现在,许多应用程序下线,我更喜欢使用比标记更多的帮助来维护那些应用程序。

有很多 HTML 没有被 helpers 覆盖,所以你不能避免混合,但是你可以通过尽可能使用 helpers 来最小化复杂性和混乱。当你开始使用表单时,你会得到很多安全性的东西,并且 ID 和 NAME 会按照CakePHP喜欢的方式格式化。

PHPCakePHP就是为此而构建的。为什么只使用半个语言或半个框架?

于 2010-07-13T08:27:10.747 回答
8

这样做的不可否认的好处是 100% 正确的语法,因为您已经消除了任何可能的胖手指和缺少打开/关闭标签的可能性。不过我可以从经验告诉你的是,半年后,阅读和修改这个结构的难度将增加一倍。插入条件元素也很困难。您需要在这里使用三元运算符,这会使事情变得更不可读。

总的来说,我建议使用传统的 HTML/PHP 组合。

于 2010-07-13T00:19:37.550 回答
4

我个人对此很矛盾,但我在使用 PHP 时选择了 HTML+PHP 模式。我可以看到两者的优点,但这就是我选择 HTML+PHP 的原因:

  1. PHP 是一种模板语言——最好的。作为一种模板语言,我觉得它远胜于任何其他 PHP 模板语言,以及其他语言 web 框架中的许多模板语言,因为它的灵活性和强大。

    如果我使用的是 Python 或 Java 之类的语言,我很可能更喜欢您建议的形式——但这并不是使用 PHP 时的完美解决方案。

  2. 您将失去使用已经为处理 HTML 本身而开发的许多工具的能力。您尤其会失去那些习惯于修改 HTML 并且能够以其他方式对视图本身进行简单更改的人。

  3. 绝对的灵活性,无需添加更多 API 层。

这样做的副作用是,我倾向于使用for():andendfor;语法等,并努力从不回显 HTML 标记 - 我将重组以避免它(即,除非在帮助程序等内部,否则不使用方法,在这种情况下,我会使用 Html Helper 生成我的标签,因为在 PHP 类或函数中包含 HTML 汤只是愚蠢的:P)。

于 2010-10-29T20:05:16.527 回答
3

通过使用帮助程序,您可以在某种程度上对您的代码进行验证。因此,当 HTML5 出现并且新规范中的html或标记发生更改时。head从理论上讲,您只需更改您的 html 帮助程序类,您的所有标记都是 HTML5。

然而,相反,您也依赖于 Cake 来生成格式良好的标签。尽管这些框架中有很多是全栈的,但不可避免地有一些领域它们处理得比其他领域更好。您不应该期望它们能够提供整个 HTML 标记集。

我个人认为做你所做的事情是矫枉过正的。由于目录映射的好处,我喜欢将 HTML 帮助程序用于链接、url 和包含的文件。但我不使用助手来生成简单的div标签。

于 2010-07-13T00:20:27.067 回答
1

以编程方式,这是非常正确的,因为您实际上从未构建过字符串。好的是因为每件事都是一个函数,你可以向它传递各种参数,并将所有逻辑推送到你的控制器。因此,例如,您的标题可以为每个页面动态生成,然后传递给您的$html->tag('title', 'Title For App')调用。

但是,由于函数调用的数量庞大,我怀疑它的性能不如简单地使用 PHP 循环和回显变量。

于 2010-07-13T00:18:06.963 回答