我在CakePHP中有一个包含两个实时搜索文本输入的表单。当用户选择结果时,它们中的每一个都会更新隐藏字段的值。该模式被称为Record
,以及所涉及的属性是在使用安全组件和jQuery的CakePHP表单中禁用输入元素
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',
);
}
看来,每当我改变CakePHP的生气来自Javascript的隐藏输入值,它将我发送到黑洞方法。根据文档,这没问题。
但令我惊讶的是,安全组件一直忽略我的disabledFields
设置。
我一直在搜索几个网络资源,每个人都指向disabledFields
选项。但它不适合我。
有什么建议吗?
谢谢!
UPDATE
我已经找到了一个解决办法,但它的的确确是难看。我用常规选择字段替换了隐藏的输入字段,但将CSS显示属性设置为none
。
这样安全组件就不会再抱怨了,用户一直在查看几个实时搜索框。
我不明白为什么用Javascript改变选择没关系,但是改变一个隐藏的输入。
我已经用你提出的相同解决方案编辑了我的问题。另一方面,[关于安全组件的CakePHP文档](http://book.cakephp.org/view/1308/Usage)告诉''beforeFilter'是配置组件的正确位置。 – elitalon
是的,对不起,我没有看到这个函数的名字,我以为你是直接在某个动作中做的。 :) – entropid