我正在添加多个复选框,但面临的问题,添加类到父div。
HTML输出应如下所示
<div class="custom-control custom-control-primary custom-checkbox">
<input type="checkbox" class="custom-control-input" id="colorCheck1" checked="">
<label class="custom-control-label" for="colorCheck1">Primary</label>
</div>
我正在尝试使用此代码
<?php
$list = ['1'=>'Select 1','2'=>'Select 2']; /*Array of list */
echo $this->Form->select('profile_ids', $list, [
'multiple' => 'checkbox',
'class'=>'custom-control-input',
'label' => [
'class' => 'custom-control-label'
],
'templates' => [
'inputContainer' => '<div class="custom-control custom-control-primary custom-checkbox">{{content}}</div>'
]
]);
而我得到的html代码不是我想要的
<div class="checkbox">
<label class="custom-control-label" for="profile-ids-13">
<input type="checkbox" name="profile_ids[]" value="13" id="profile-ids-13" class="custom-control-input" templates="<div class="custom-control custom-control-primary custom-checkbox">{{content}}</div>">default
</label>
</div>
请帮助如何获取所需的复选框。
谢谢
1条答案
按热度按时间vhipe2zx1#
templates
选项只能与FormHelper::control()
方法一起使用,特定于元素的方法将无法识别它,并且通常只使用为表单帮助器配置的内容,并且只使用生成特定控件所需的内容。此外,多复选框控件使用与单个复选框不同的模板。对于多复选框,
inputContainer
将是整个复选框集的 Package 器,而不是单个复选框本身的 Package 器,为此,您必须改为自定义checkboxWrapper
。最重要的是,需要对nestingLabel
模板进行更改,以便将输入放置在标签之外。直接创建特定元素
因此,如果您想直接使用
select()
,那么您必须配置表单助手的全局模板:这将创建以下HTML:
如果你想让模板只应用于这个
select()
调用,那么你可以在设置模板之前调用$this->Form->templater()->push();
,在调用$this->Form->select(...)
之后调用$this->Form->templater()->pop();
,这样当前的模板状态会被预先缓冲,并在你生成元素之后恢复。使用
control()
创建元素如果您想使用
control()
,那么您需要注意label
选项不会影响单个复选框的标签,但会影响 Package 器的标签。为了配置嵌套标签,您必须在选择选项中传递标签选项,或者在nestingLabel
模板中硬编码属性。无论如何您都必须修改它:或使用模板中的硬编码标签属性:
这两种方法都将生成以下HTML:
ps.你可能想 checkout 像
friendsofcake/bootstrap-ui
这样的插件,它可以透明地为你做所有这些。另请参阅
*Cookbook〉视图〉帮助程序〉表单〉自定义模板FormHelper使用
*Cookbook〉视图〉帮助程序〉表单〉控件选项