【问题标题】:How to 'unlock' a field in a CakePHP form when it is part of a hasMany association当 CakePHP 表单中的字段是 hasMany 关联的一部分时,如何“解锁”该字段
【发布时间】:2013-04-10 23:54:45
【问题描述】:

我有一个表格,代表我们数据库中的RewardModifier 表。那RewardModifierhasManyRewardOption

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

所以,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 关系键入的字段。

谢谢。

【问题讨论】:

    标签: php forms cakephp cakephp-2.0 has-many


    【解决方案1】:

    我遇到了类似的问题。我发现将这个(相当于)添加到 RewardModifier 控制器就可以了:

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

    【讨论】:

    • 谢谢,这帮助我找到了解决方案 :)
    • @BarryChapman,您能否发布最终解决方案,因为答案对我不起作用。谢谢
    • @Barry Chapman 说它“帮助我找到了解决方案”并不构成正确答案,除非您指定该解决方案实际上是什么。
    • Crikey,解决方案是什么?我遇到了同样的问题。
    • 从 cakePHP 3.x 开始,这将是:$this->Security->config('unlockedFields', ['reward_options']); 对其他人来说可能很明显,但调用 config() 让我有点失望。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多