[ 'type' => 'int', 'back-end' => '', 'frontend' => '', 'label' => 'XXXX', 'input' => 'texto', 'frontend_class' => 'validar maior que zero', 'fonte' => '', 'global' => \ Magento \ Eav \ Modelo \ Entidade \ Atributo \ ScopedAttributeInterface :: SCOPE_GLOBAL, 'visible' => true, 'required' => true, 'user_defined' => false, 'padrão' => 0, 'pesquisável' => falso, 'filtrável' => verdadeiro, 'comparável' => falso, 'visible_on_front' => false, 'used_in_product_listing' => true, 'exclusivo' => falso ]
Estou adicionando atributo de produto personalizado que funciona bem, mas não é possível adicionar validate-greater-than-zero
validação.
Se olharmos para qualquer propriedade de atributo, Input Validation for Store Owner
há um número limitado de validações nas opções selecionadas.
validate-number
, validate-digits
, validate-email
, validate-url
, validate-alpha
,validate-alphanum
Essas são as únicas validações aplicadas na seção de atributo Produto.
magento2
javascript
jquery
form-validation
knockoutjs
Amit Singh
fonte
fonte
Respostas:
Uma das soluções é adicionar um
backend model
ao seu atributo, que é usado para formatar / validar o valor do seu atributo antes de salvar e / ou após o carregamento.Adicione uma classe de back-end:
Aqui está um exemplo de sua classe personalizada
\Foo\Bar\Model\Attribute\Backend\YourAttribute
Se você quiser um exemplo simples desse tipo de classe, verifique
\Magento\Customer\Model\Customer\Attribute\Backend\Website
\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
backend_model
coluna naeav_attribute
tabelaEDIT
Se você quiser uma classe que faça quase a mesma coisa que você deseja, pode dar uma olhada na
SKU
validação de atributo\Magento\Catalog\Model\Product\Attribute\Backend\Sku
. Também adicionei o método na classe de exemplo
EDIT
Outra solução (talvez não a melhor) é criar um plugin na função
\Magento\Eav\Helper\Data::getFrontendClasses
e adicionar aqui a sua classe frontend que pode ser validada na frente.fonte
eav_attribute
tabela da coluna,frontend_class
é este o valorvalidate-greater-than-zero
?validate-number
,validate-digits
,validate-email
,validate-url
,validate-alpha
,validate-alphanum
.Com a ajuda de
Matthéo Geoffray
, foi o que fiz para aplicar a validação de front-end para atributos personalizados.Este é o atributo customizado no script de instalação.
Adicionei plugin no di.xml
Aqui está o código do plugin.
Basicamente
\Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules
, o método chamadomapRules
corresponde apenas à classe frontend contra um número limitado de regras de validação. Para aplicar mais regras de validação, precisamos anexar regras usando o plugin.Para validação no servidor, consulte a
Matthéo Geoffray
resposta.fonte
Não sei se isso pode ser possível no script de instalação. Mas tenho certeza que é possível se você criar "antes do plug-in do ouvinte" com a função
beforeSave()
e verificar o valor lá.fonte