tutorial inner hasmany español consultas cakephp2 belongsto php forms cakephp cakephp-2.0 has-many

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