如何';解锁';CakePHP表单中的字段,当它是hasMany关联的一部分时

如何';解锁';CakePHP表单中的字段,当它是hasMany关联的一部分时,php,forms,cakephp,cakephp-2.0,has-many,Php,Forms,Cakephp,Cakephp 2.0,Has Many,我有一个表单,它表示数据库中的RewardModifier表。那个RewardModifier有许多报酬选项 我的表单结构如下(图): 因此,RewardModifier可以在页面上有许多元素,每个元素都有许多RewardOption项 问题 问题是,用户可以使用Javascript删除此表单的部分,这实际上是将其从DOM中删除。当他们这样做时,它会破坏安全组件,因为POST字段与生成页面时提供的令牌不匹配 现在,我以前一直使用unlockedFields来处理这个问题: $this->

我有一个表单,它表示数据库中的
RewardModifier
表。那个
RewardModifier
有许多
报酬选项

我的表单结构如下(图):

因此,
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
的数据,以便它可以忽略这些为许多关系设置关键帧的字段


谢谢。

我也有类似的问题。我发现在RewardModifier控制器中添加(相当于)这一点起到了作用:

public function beforeFilter(){
     $this->Security->unlockedFields = array('RewardOption');
}

在表单代码中添加以下内容对我很有用

$this->Form->unlockField('User.id');
从视图文件中解锁字段也有助于分离控制器的
beforeFilter()


来源:

谢谢,这帮助我找到了解决方案:)@BarryChapman,你能发布什么是最终解决方案吗,因为答案对我不适用。Thanks@Barry查普曼说它“帮助我找到了解决方案”并不是一个正确的答案,除非你具体说明这个解决方案实际上是什么。天哪,这个解决方案是什么?我遇到了同样的问题。从CakePHP3.x开始,这将是:
$this->Security->config('unlockedFields',['reward_options')对其他人来说可能是显而易见的,但是调用config()让我有点不知所措。