Pregunta

He agregado un atributo a una entidad de dirección del cliente. El código de configuración de atributos es el siguiente-

'entity_type_id'=>$customer_address_type_id,
'attribute_code'=>'signature_required',
'backend_type'=>'int',
'frontend_input'=>'boolean',
'frontend_label' => 'Signature required',
'is_global' => '1',
'is_visible' => '1',
'is_required' => '0',
'is_user_defined' => '0',

Tengo entonces -

  • Atributo agregado al modelo entity setup.php
  • Se agregó un campo HTML en el formulario de edición

Ahora obtengo el atributo guardado en la base de datos cuando se verifica la casilla de verificación. Sin embargo, no se está desanimando cuando la casilla de verificación no está marcada (supongo que debido a que la entrada de la casilla de verificación no se 'post' si no se controla.

¿Cuál es la mejor manera de desmarcar esto? ¿Debo agregar un valor predeterminado de 0? ¿O desastar/eliminar el atributo antes de guardar en el controlador? ¿Debo agregar métodos Get/Set al modelo?

¿Fue útil?

Solución 2

Al final, anulé el método SetData en mi modelo personalizado.

Encontré algunos buenos recursos Al intentar anular/sobrecargar (ambos términos son comunes) controladores/enrutadores.

También es notable -

'frontend_input'=>'boolean',

debiera ser

'frontend_input'=>'checkbox',

Otros consejos

Tuve un problema similar hoy, encontré que las diversas guías son tediosas y trabajaron a su alrededor cambiando usando una "selección" en lugar de una "casilla de verificación" y configurando la "fuente" en eav/entity_attribute_source_boolean que da un simple desplegable "Sí"/"No" y ahorra correctamente sin modificar.

Tiene razón, el problema es que las casillas de verificación sin control no se envían en la solicitud de publicación.

Puede solucionar esto colocando una entrada de forma oculta con un valor de '0' antes de su casilla de verificación como esta:

<input type='hidden' name='my_checkbox' value='0'>
<input type='checkbox' name='my_checkbox' value='1'>

Ahora, si se verifica la casilla de verificación, se enviará a través de un valor de '1', si no está marcado, enviará un valor de '0'.

Debo tener en cuenta que esto solo es cierto en PHP porque cuando se envían dos valores posteriores idénticos, se necesita el último. Diferentes idiomas del lado del servidor pueden manejar esto de manera diferente

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top