Как «разблокировать» поле в форме CakePHP, когда оно является частью ассоциации hasMany

У меня есть форма, которая представляет таблицу 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.

Благодарю.

    У меня была аналогичная проблема. Я обнаружил, что добавление (эквивалент) этого в контроллер RewardModifier выполнило трюк:

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

    Добавление в код формы для меня работало

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

    Разблокирование полей из файлов вида также помогает beforeFilter() контроллер beforeFilter() .

    Источник: /core-libraries/helpers/form.html#FormHelper::unlockField