[ '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-zero
validación.
Si observamos las propiedades de los atributos, Input Validation for Store Owner
hay 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 model
atributo 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\YourAttribute
Si desea un ejemplo simple de ese tipo de clase, puede consultar
\Magento\Customer\Model\Customer\Attribute\Backend\Website
\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
backend_model
columna en laeav_attribute
tablaEDITAR
Si desea una clase que haga casi lo mismo que desea, puede echar un vistazo a la
SKU
validación de atributos\Magento\Catalog\Model\Product\Attribute\Backend\Sku
Tambié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::getFrontendClasses
y agregar su clase frontend aquí que pueda validarse al frente.fuente
eav_attribute
tabla de la columna, ¿frontend_class
es 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 llamadomapRules
solo 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 Geoffray
respuesta.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