3

我有一个代表RewardModifier我们数据库中的表的表单。那个RewardModifier hasMany RewardOption

我的表格结构如下(图片):

在此处输入图像描述

因此,RewardModifier页面上可以有很多元素,每个元素都有很多RewardOption项。

问题

问题是,用户可以使用 Javascript 删除此表单的部分,这实际上将其从 DOM 中删除。当他们这样做时,它会破坏安全组件,因为 POST 的字段与生成页面时提供的令牌不匹配。

现在,我以前一直unlockedFields在处理这个问题:

$this->Security->disabledFields = array(
   'PrjRewardModifier.reward_id',
   'PrjRewardModifier.title',
   'PrjRewardModifier.option_type',
   'PrjRewardOption.description',
   'PrjRewardOption.modifier',
   'PrjRewardOption.amount'
);

我知道它disabledFields已被弃用,但我们暂时使用它。

当我在 中调试发布的表单数据时SecurityComponent,我看到以下内容:

(int) 8 => 'PrjRewardModifier.0.reward_id',
(int) 9 => 'PrjRewardModifier.0.title',
(int) 10 => 'PrjRewardModifier.0.option_type',
(int) 11 => 'PrjRewardModifier.0.PrjRewardOption.0.description',
(int) 12 => 'PrjRewardModifier.0.PrjRewardOption.0.modifier',
(int) 13 => 'PrjRewardModifier.0.PrjRewardOption.0.amount'

我需要知道如何编辑传递给的数据,unlockedFields以便它可以忽略这些为 hasMany 关系键入的字段。

谢谢。

4

2 回答 2

4

我有一个类似的问题。我发现将这个(相当于)添加到 RewardModifier 控制器可以解决问题:

public function beforeFilter(){
     $this->Security->unlockedFields = array('RewardOption');
}
于 2013-04-13T10:25:21.383 回答
3

将以下内容添加到表单代码中对我有用

$this->Form->unlockField('User.id');

从视图文件中解锁字段也有助于整理控制器的beforeFilter().

来源: /core-libraries/helpers/form.html#FormHelper:: unlockField

于 2016-03-30T19:23:52.993 回答