这对你们中的一些人来说似乎很明显,但我真的很难找到一个直接的答案。我一般用谷歌搜索,同时阅读CakePHP手册和API,以回答以下问题:
创建输入时,以下代码会创建以下输出:
// in the view
echo $this->Form->input('notes');
// resultant html
<div class="input textarea">
<label for="notes">Notes</label>
<textarea id="notes" rows="5" name="notes"></textarea>
</div>
注意:这在大多数输入类型中都是一致的;因为它是一致的,所以它非常适合格式化。
但是,使用复选框:
//In the view
echo $this->Form->input('ticket_required',
['type' => 'checkbox']
);
// resultant HTML
<div class="input checkbox">
<input type="hidden" value="0" name="ticket_required">
<label for="ticket-required">
<input id="ticket-required" type="checkbox" value="1" name="ticket_required">
Ticket Required</label>
</div>
[注意:我理解隐藏领域的需要/愿望]
现在.. 当然仅仅想要与其他标准输入相同的格式方法,这不是一个罕见的要求吗?
我的问题 - 如何让CakePHP创建一个checkbox元素,如下所示:
// desired HTML
<div class="input checkbox">
<input type="hidden" value="0" name="ticket_required">
<label for="ticket-required">
Ticket Required</label>
<input id="ticket-required" type="checkbox" value="1" name="ticket_required">
</div>
要清楚:可见元素的顺序与其他生成的元素相同(输入前的标签,并且所有元素都包含在包装div中)。
请注意..我尝试了'nestedInput' => false
选项。这实际上完全从div中删除了复选框输入。
我无法理解为什么不这样做......但即使是这样,我也无法理解为什么这对文档来说不是一个明显的问题。
哦,好吧..希望有人可以帮助我。
提前致谢。
瑞克
答案 0 :(得分:4)
我原以为nestedInput
会起作用,但即使这样,你也不想将它添加到你在整个网站上创建的每个输入中。
CakePHP 3使用string templates来构建表单控件。 You can modify them to suit your needs
默认情况下,该复选框使用nestingLabel
模板,因此如果您希望停止嵌套所有输入,则可以更改模板。
// src/View/AppView.php
$this->loadView('Form', [
templates => [
'nestingLabel' => '<label{{attrs}}>{{text}}</label>{{hidden}}{{input}}'
],
// [More helper default config overrides][2]..
])
为了更好地控制你的助手,你可以create your own扩展其中一个核心助手。