Pergunta

Adicionei um atributo a uma entidade de endereço do cliente. O código de configuração do atributo é o seguinte-

'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',

Eu tenho então -

  • Atributo adicionado ao modelo entity setup.php
  • Adicionado um campo HTML no formulário de edição

Agora estou economizando o atributo no banco de dados quando a caixa de seleção é verificada. No entanto, não está sendo não definido quando a caixa de seleção está desmarcada (acho que devido à entrada da caixa de seleção que não está sendo 'postagem' se não for controlada.

Qual é a melhor maneira de desmarcar isso? Devo adicionar um valor padrão de 0? Ou desativar/excluir o atributo antes de salvar no controlador? Devo adicionar métodos Get/Set ao modelo?

Foi útil?

Solução 2

No final, substituo o método setData no meu modelo personalizado.

Eu encontrei alguns bons recursos Ao tentar substituir/sobrecarregar (ambos os termos são controladores/roteadores comuns).

Também de nota -

'frontend_input'=>'boolean',

deveria estar

'frontend_input'=>'checkbox',

Outras dicas

Eu tive um problema semelhante hoje, achei os vários guias tediosos e trabalhei em torno dele, mudando usando um "selecione" em vez de uma "caixa de seleção" e definir a "fonte" para eav/entity_attribute_source_boolean O que fornece um menu suspenso "sim"/"não" simples e economiza corretamente sem modificação.

Você está certo, o problema é que as caixas de seleção desmarcadas não são enviadas na solicitação de postagem.

Você pode consertar isso colocando uma entrada de formulário oculto com um valor de '0' antes da sua caixa de seleção como esta:

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

Agora, se a caixa de seleção for verificada, ele enviará um valor de '1', se estiver desmarcado, enviará um valor de '0'.

Devo observar que isso só é verdade no PHP, porque quando dois valores de pós idênticos são enviados, é o último. Diferentes linguagens do lado do servidor podem lidar com isso de maneira diferente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top