在CakePHP表单中禁用使用安全组件和jQuery的输入元素
我在Cake
PHP中有一个表单,它有两个实时搜索文本输入.当用户选择结果时,它们中的每一个都更新隐藏字段的值.该模型称为Record,涉及的属性是
> budget_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选项.但它对我不起作用. 有什么建议? 谢谢!! UPDATE 我找到了一个解决方法,但它真的很难看.我已使用常规选择字段替换隐藏的输入字段,但将CSS显示属性设置为none. 这样,安全组件不再抱怨,并且用户不断查看几个实时搜索框. 我不明白为什么用Javascript改变一个选择它没关系,但不改变隐藏的输入. 解决方法
之所以发生这种情况,是因为安全组件锁定了隐藏字段,不仅保存了哈希的名称,还保存了它们的值.因此,当您更改其值时,您将使整个表单无效.唯一的解决方案是将这些字段从隐藏字段切换到普通字段,包含在display:none; DIV.
另一种方法是禁用对该字段的检查,但是您发布的代码不是正确的方法.您应该在组件配置期间指定字段,如下所示: var $components = array('Security' => array( 'blackHoleCallback' => 'callback','requireAuth' => array('action1','action2'),'allowedControllers' => array('controller'),'allowedActions' => array('action1','disabledFields' => array('Record.program_id_search','Record.concept_id_search') ) ); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |