用于多对多选择的HTML表单帮助器setTemplates

时间:2018-10-19 01:53:10

标签: php html cakephp

我使用的是CakePHP 3.6,并且我一直在使用文档中的form-control form-control-sm向某些输入表单添加一些类(setTemplates)。这样,我修改了input生成的标签selectForm->control()如下

$this->Form->setTemplates([
  'inputContainer' => '<div class="input form-group {{type}}{{required}}">{{content}}</div>',
  'input' => '<input type="{{type}}" class="form-control form-control-sm" name="{{name}}"{{attrs}}/>',
  'select' => '<select class="form-control form-control-sm" name="{{name}}"{{attrs}} />']);

echo $this->Form->control('name'); // This is an input
echo $this->Form->control('client_email_id'); // This is a select

但是,当考虑了belongsToMany关联时,如何修改模板(如果可能)?因为Form->control()帮助程序将同时生成标记inputselect,并且似乎仅input标记被修改。例如

echo $this->Form->control('projects._ids', ['options' => $projects]);

将生成

<div class="input form-group select">
 <label for="projects-ids">Projects</label>
 <input type="hidden" class="form-control form-control-sm" name="projects[_ids]" value="">
 <select name="projects[_ids][]" multiple="multiple" id="projects-ids">...</select>
</div>

如您所见,form-control form-control-sm类仅添加到input标记中,而不添加到select标记中。有人知道我该怎么做吗?

我想我可以创建一个全新的模板,但是我想知道是否可以使用Form-control()函数。

1 个答案:

答案 0 :(得分:2)

神奇的_ids键将导致多选生成,它具有自己的模板,即selectMultiple,默认情况下如下所示:

<select name="{{name}}[]" multiple="multiple"{{attrs}}>{{content}}</select>

您也必须修改它。

ps,您不能为select控件使用自闭标签,因为现有内容({{content}})将不会显示,这将使表单生成混乱!