2015-12-03 103 views
3

这对你们中的一些人来说似乎很明显,但我真的很努力地找到一个直接的答案。我一般用Google搜索,以及同时读取CakePHP的手册和回答以下问题的API:CakePHP 3.x复选框格式问题

当创建一个输入,下面的代码创建了以下成果:

// 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的复选框输入。

我不明白为什么不这样做......但即使是这样,我无法理解为什么这不是一个明显的文档问题。

唉..希望有人可以帮助我在这里。

在此先感谢。

里克

+0

我认为这是你正在寻找的东西:http://stackoverflow.com/a/5394069/3144159 –

+0

这不适用于CakePHP 3.x – elb98rm

回答

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扩展核心助手之一。