【发布时间】:2011-07-12 20:44:52
【问题描述】:
我在 CakePHP 中有一个表单,它有两个实时搜索文本输入。当用户选择结果时,它们中的每一个都会更新隐藏字段的值。该模型名为Record,涉及的属性为
budget_idprogram_idconcept_id
我以这种方式使用 FormHelper 创建了一个表单:
...
<?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 就会生气,并将我发送到 blackhole 方法。根据文档,没关系。
但令我惊讶的是,安全组件一直忽略我的disabledFields 设置。
我一直在搜索几个网络资源,每个人都指向disabledFields 选项。但这对我不起作用。
有什么建议吗?
谢谢!!
更新
我找到了一种解决方法,但它真的很难看。我已将隐藏的输入字段替换为常规选择字段,但将 CSS 显示属性设置为 none。
这样安全组件就不会再抱怨了,用户会继续查看几个实时搜索框。
我不明白为什么用 Javascript 更改选择可以,但不能更改隐藏输入。
【问题讨论】:
标签: jquery security cakephp autocomplete components