[
'type' => 'int',
'backend' => '',
'frontend' => '',
'label' => 'XXXX',
'input' => 'texto',
'frontend_class' => 'validar-mayor-que-cero',
'source' => '',
'global' => \ Magento \ Eav \ Model \ Entity \ Attribute \ ScopedAttributeInterface :: SCOPE_GLOBAL,
'visible' => verdadero,
'required' => verdadero,
'user_defined' => false,
'default' => 0,
'searchable' => falso,
'filterable' => verdadero,
'comparable' => falso,
'visible_on_front' => falso,
'used_in_product_listing' => verdadero,
'unique' => false
]
Estoy agregando un atributo de producto personalizado que funciona bien, pero no puedo agregar validate-greater-than-zerovalidación.
Si observamos las propiedades de los atributos, Input Validation for Store Ownerhay un número limitado de validaciones en las opciones de selección.
validate-number, validate-digits, validate-email, validate-url, validate-alpha,validate-alphanum
Estas son las únicas validaciones aplicadas en la sección de atributos del Producto.
magento2
javascript
jquery
form-validation
knockoutjs
Amit Singh
fuente
fuente

Respuestas:
Una de las soluciones es agregar un
backend modelatributo a su atributo que se utiliza para formatear / validar el valor de su atributo antes de guardarlo y / o después de la carga.Agregar una clase de back-end:
Aquí hay un ejemplo de su clase personalizada
\Foo\Bar\Model\Attribute\Backend\YourAttributeSi desea un ejemplo simple de ese tipo de clase, puede consultar
\Magento\Customer\Model\Customer\Attribute\Backend\Website\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackendbackend_modelcolumna en laeav_attributetablaEDITAR
Si desea una clase que haga casi lo mismo que desea, puede echar un vistazo a la
SKUvalidación de atributos\Magento\Catalog\Model\Product\Attribute\Backend\SkuTambién agregué el método en la clase de ejemplo
EDITAR
Otra solución (tal vez no la mejor) es crear un complemento en la función
\Magento\Eav\Helper\Data::getFrontendClassesy agregar su clase frontend aquí que pueda validarse al frente.fuente
eav_attributetabla de la columna, ¿frontend_classes el valorvalidate-greater-than-zero?validate-number,validate-digits,validate-email,validate-url,validate-alpha,validate-alphanum.Con la ayuda de
Matthéo Geoffray, esto es lo que hice para aplicar la validación frontend para atributos personalizados.Este es el atributo personalizado en el script de instalación.
Agregué el complemento en di.xml
Aquí está el código del complemento.
Básicamente
\Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules, el método llamadomapRulessolo hace coincidir la clase frontend con un número limitado de reglas de validación. Para aplicar más reglas de validación, necesitamos agregar reglas usando el complemento.Para la validación del lado del servidor, consulte la
Matthéo Geoffrayrespuesta.fuente
No estoy seguro de que sea posible desde el script de instalación. Pero estoy seguro de que es posible si va a crear "antes del complemento de escucha" con la función
beforeSave()y comprobar el valor allí.fuente