inner - Cómo desbloquear un campo en un formulario de CakePHP cuando es parte de una asociación hasMany
hasmany cakephp (2)
Tengo un formulario que representa una tabla RewardModifier
en nuestra base de datos. Ese RewardModifier
hasMany
RewardOption
.
Mi formulario está estructurado así (imagen):
Por lo tanto, RewardModifier
puede tener muchos elementos en la página, cada uno con muchos elementos RewardOption
.
El problema
El problema es que los usuarios pueden eliminar secciones de este formulario usando Javascript, que esencialmente lo elimina del DOM. Cuando lo hacen, rompe el componente de seguridad, porque los campos POST''ed no coinciden con el token suministrado cuando se generó la página.
Ahora, he estado usando unlockedFields
para manejar esto antes:
$this->Security->disabledFields = array(
''PrjRewardModifier.reward_id'',
''PrjRewardModifier.title'',
''PrjRewardModifier.option_type'',
''PrjRewardOption.description'',
''PrjRewardOption.modifier'',
''PrjRewardOption.amount''
);
Sé que disabledFields
está en desuso, pero lo estamos usando por el momento.
Cuando depuro los datos del formulario publicado en SecurityComponent
, veo lo siguiente:
(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''
Necesito saber cómo editar los datos que pasan a los campos unlockedFields
para que no tengan en cuenta estos campos que están codificados para muchas relaciones.
Gracias.
Tuve un problema similar. Encontré que agregar (el equivalente de) esto al controlador RewardModifier hizo el truco:
public function beforeFilter(){
$this->Security->unlockedFields = array(''RewardOption'');
}
Agregar lo siguiente al código del formulario funcionó para mí
$this->Form->unlockField(''User.id'');
Desbloquear los campos desde dentro de los archivos de vista también ayuda a beforeFilter()
el beforeFilter()
del controlador.
Fuente: /core-libraries/helpers/form.html#FormHelper::unlockField