CakePHP 3.x 复选框格式问题

3
这对于一些人来说可能很明显,但我真的很难找到一个直接的答案。我通常会使用谷歌搜索,同时阅读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创建一个复选框元素,如下所示:

// 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中完全删除了复选框输入。
我不明白为什么不是这样做...但即使是这样,我也无法想象为什么这不是文档中显而易见的问题。
哦,好吧...希望有人可以在这里帮助我。
提前致谢。
Rick

我想这就是你要找的东西:https://dev59.com/HVDTa4cB1Zd3GeqPFgSl#5394069 - Inigo Flores
这在CakePHP 3.x上不起作用。 - elb98rm
1个回答

4
我本以为嵌套输入框会起作用,但即使它起作用了,你也不想在整个网站上创建的每个输入框中都添加它。
CakePHP 3使用字符串模板来构建表单控件。 您可以修改它们以适应您的需求
默认情况下,复选框使用nestingLabel模板,因此如果您想停止所有输入框的嵌套,则可以更改模板。
// src/View/AppView.php

$this->loadView('Form', [
    templates => [
        'nestingLabel' => '<label{{attrs}}>{{text}}</label>{{hidden}}{{input}}'
    ],
    // [More helper default config overrides][2]..
])

如果您想更好地控制助手,可以创建自己的助手并扩展其中一个核心助手。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接