我在 CakePHP 中有一个表单,它有两个实时搜索文本输入。当用户选择结果时,它们中的每一个都会更新隐藏字段的值。该模型称为Record
,涉及的属性有
budget_id
program_id
concept_id
我创建了一个表格使用表单助手这样:
...
<?php echo $this->Form->create('Record') ?>
<h1>Create a record</h1>
<?php echo $this->Form->hidden('Record.budget_id', array('value' => $budget['Budget']['id'])) ?>
<?php echo $this->Form->hidden('Record.program_id') ?>
<?php echo $this->Form->input('Record.program_id_search', array(...)) ?>
<?php echo $this->Form->hidden('Record.concept_id') ?>
<?php echo $this->Form->input('Record.concept_id_search', array(...)) ?>
<?php echo $this->Form->submit('Send') ?>
<?php echo $this->Form->end(); ?>
...
如您所见,存储模型属性的输入字段被隐藏。实时搜索框配置有 jQuery 的自动完成插件。
按照 CakePHP 手册的建议,我禁用了两个额外的字段beforeFilter
方法,以便安全组件忽略它们并且表单通过验证:
public function beforeFilter() {
$this->Security->disabledFields = array(
'Record.program_id_search',
'Record.concept_id_search',
);
}
每当我更改 Javascript 中隐藏输入的值时,CakePHP 似乎就会生气,并将我发送到黑洞方法。根据文档,这是可以的。
但令我惊讶的是,安全组件一直忽略我的disabledFields
设置。
我一直在几个网络资源中搜索,每个人都指出disabledFields
选项。但这对我不起作用。
有什么建议么?
Thanks!!
UPDATE
我找到了一个解决方法,但它真的很难看。我已将隐藏输入字段替换为常规选择字段,但将 CSS 显示属性设置为none
.
这样,安全组件就不会再抱怨,并且用户会继续查看几个实时搜索框。
我不明白为什么用 Javascript 更改选择可以,但更改隐藏输入不行。