如何';解锁';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()让我有点不知所措。