2

所以我一直在阅读很多“使用 Web 标准进行设计”并且非常喜欢它。我是 CakePhp 的大用户,当我查看 Cake 使用其 FormHelper 创建的各种表单元素的源代码时,我看到了各种无关的

在书中,他提倡语义化 HTML,并尽可能将您的标记写得简单/通用。

所以我的问题是,在这些情况下我是否更好地编写自己的 HTML?我真的很想按照 XHTML 和 CSS 标准工作,而且我似乎会花同样多的时间(如果不是更多的话)清理 Cakes HTML,而我可以自己编写

想法?

ps 这是 CakePhp 使用 FormHelper 生成的开箱即用表单中的示例

<form id="CompanyAddForm" method="post" action="/omni_cake/companies/add" accept-charset="utf-8"><div style="display:none;"><input type="hidden" name="_method" value="POST" /></div>       <div class="input text required"><label for="CompanyName">Name</label><input name="data[Company][name]" type="text" maxlength="50" id="CompanyName" /></div>        <div class="input text required"><label for="CompanyWebsite">Website</label><input name="data[Company][website]" type="text" maxlength="50" id="CompanyWebsite" /></div>        <div class="input textarea"><label for="CompanyNotes">Notes</label><textarea name="data[Company][notes]" cols="30" rows="6" id="CompanyNotes" ></textarea></div>        <div class="submit"><input type="submit" value="Submit" /></div></form>

编辑: 缩进形式(缩进不会影响标准合规性问题,但上述单行样式几乎不可能阅读):

<form id="CompanyAddForm" method="post" action="/omni_cake/companies/add" accept-charset="utf-8">
    <div style="display:none;">
       <input type="hidden" name="_method" value="POST" />
    </div>
    <div class="input text required">
        <label for="CompanyName">Name</label>
        <input name="data[Company][name]" type="text" maxlength="50" id="CompanyName" />
    </div>
    <div class="input text required">
        <label for="CompanyWebsite">Website</label>
        <input name="data[Company][website]" type="text" maxlength="50" id="CompanyWebsite" />
    </div>
    <div class="input textarea">
        <label for="CompanyNotes">Notes</label>
        <textarea name="data[Company][notes]" cols="30" rows="6" id="CompanyNotes" ></textarea>
    </div>
    <div class="submit">
        <input type="submit" value="Submit" />
    </div>
</form>

在上面,有几个 div 看起来是不必要的,比如具有内联 CSS“display:none”的那个。我意识到我可以更改所有字段的类和 ID,但如果我为每个字段都这样做,我还不如自己编写 HTML...

4

4 回答 4

3

我对你的两个问题的回答如下:

生成 HTML、表单等时,CakePhp 是否“符合标准”?

是的。

在 [Designing with Web Standards] 中,他提倡语义 HTML,并尽可能简单/通用地编写您的标记。所以我的问题是,在这些情况下我是否更好地编写自己的 HTML?

有时你过得更好,有时你不是。如果您的目标是使用最少的语义标记,那么您最好在大多数情况下编写自己的 HTML。但是,如果您的目标是快速生成符合标准的 HTML ,那么让 Cake 成为它的本意——一个快速开发框架——是一个好主意。

也就是说,您可以告诉 Cake 在您发现不必要时不要打印它的一些标记。例如,您可以通过使用带有此选项div的值来抑制包装表单输入的元素:http: //book.cakephp.org/view/1397/options-divfalse

于 2011-01-06T01:41:56.290 回答
1

Cake 助手的标记输出当然是符合标准的,您可以随时检查。它可能简单,但不会更简单。带有隐藏输入字段的<div style="display:none;">容器可能是多余的,但它可以很好地对这些字段进行分组并将它们排除在外。如果您使用 SecurityComponent,您会发现更多这些必要的隐藏字段,这使得包装<div>不再是多余的。除此之外,我很难找到任何真正无关的标记。

如果您对结构不满意<div><label><input>[error]</div>,您可以使用专门的$this->Form->label()etc. 方法仅生成输入元素并将它们包装在您自己的容器元素中。只要记住在$this->Form->error()某处包括以及。

我认为最好的方法是使用基本$this->Form->input()元素组开始对您的应用程序进行原型设计。通常这些在最终的应用程序中也非常有用。如果在开发过程中您意识到您需要不同于 Cake 提供的标记,您可以开始过渡到更多自定义标记。您不应该做的一件事是编写自己的<input>元素,您应该始终使用FormHelper 方法来生成这些元素,因为它会处理很多难以手动正确重现的细节。

除了 FormHelper 之外,我认为 Cake 的 HTML 标记没有什么可抱怨的,因为其余的大部分内容都是您自己编写的。

于 2011-01-06T01:44:00.417 回答
0

问题已经回答,但可能值得补充的是,这取决于哪个标准以及哪个版本的 CakePHP。

例如,1.2.x 和 1.3.x 中的 FormHelper 不支持 HTML5 表单输入类型

echo $this->Form->input('User.email', array('type' => 'email'));

将输出类似

<div class="input textarea">
    <label for="UserEmail">Email</label>
    <textarea id="UserEmail" name="data[User][email]"></textarea>
</div>

显然这将在 2.0.x 中修复

另一个极端情况是,如果页面上有多个具有相同模型的表单,则最终可能会出现重复的 HTML 标识符。

于 2011-02-21T01:42:56.567 回答
0

根据 CakePHP 的书,生成的 HTML 是符合标准的。

您可以通过扩展 Helper 类来覆盖 FormHelper 方法的默认 HTML 输出。

更多信息在这里

于 2011-01-06T00:19:41.497 回答