[ 'type' => 'int', 'backend' => '', 'frontend' => '', 'label' => 'XXXX', 'input' => 'text', 'frontend_class' => 'valider-supérieur à zéro', 'source' => '', 'global' => \ Magento \ Eav \ Model \ Entity \ Attribute \ ScopedAttributeInterface :: SCOPE_GLOBAL, 'visible' => vrai, 'required' => vrai, 'user_defined' => false, 'default' => 0, 'consultable' => false, 'filtrable' => vrai, 'comparable' => faux, 'visible_on_front' => false, 'used_in_product_listing' => true, 'unique' => faux ]
J'ajoute un attribut de produit personnalisé qui fonctionne bien, mais je ne peux pas ajouter de validate-greater-than-zero
validation.
Si nous examinons les propriétés d'attribut dans, Input Validation for Store Owner
il y a un nombre limité de validations dans les options sélectionnées.
validate-number
, validate-digits
, validate-email
, validate-url
, validate-alpha
,validate-alphanum
Ce sont les seules validations appliquées dans la section Attribut de produit.
magento2
javascript
jquery
form-validation
knockoutjs
Amit Singh
la source
la source
Réponses:
L'une des solutions consiste à ajouter un
backend model
à votre attribut qui est utilisé pour formater / valider la valeur de votre attribut avant l'enregistrement et / ou après le chargement.Ajoutez une classe backend:
Voici un exemple de votre classe personnalisée
\Foo\Bar\Model\Attribute\Backend\YourAttribute
Si vous voulez un exemple simple de ce type de classe, vous pouvez vérifier
\Magento\Customer\Model\Customer\Attribute\Backend\Website
\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
backend_model
colonne dans leeav_attribute
tableauEDIT
Si vous voulez une classe qui fait à peu près la même chose que vous le souhaitez, vous pouvez jeter un œil à la
SKU
validation des attributs\Magento\Catalog\Model\Product\Attribute\Backend\Sku
J'ai également ajouté la méthode dans l'exemple de classe
EDIT
Une autre solution (peut-être pas la meilleure) est de créer un plugin sur la fonction
\Magento\Eav\Helper\Data::getFrontendClasses
et d'ajouter ici votre classe frontend qui peut être validée en face.la source
eav_attribute
tableau de la colonne,frontend_class
est-ce que c'est la valeurvalidate-greater-than-zero
?validate-number
,validate-digits
,validate-email
,validate-url
,validate-alpha
,validate-alphanum
.Avec l'aide de
Matthéo Geoffray
, voici ce que j'ai fait pour appliquer la validation frontale aux attributs personnalisés.Il s'agit de l'attribut personnalisé dans le script d'installation.
J'ai ajouté un plugin dans di.xml
Voici le code du plugin.
Fondamentalement
\Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules
, la méthode appeléemapRules
ne fait correspondre la classe frontale qu'à un nombre limité de règles de validation. Pour appliquer plus de règles de validation, nous devons ajouter des règles à l'aide du plugin.Pour la validation côté serveur, veuillez vous référer à la
Matthéo Geoffray
réponse.la source
Je ne suis pas sûr que cela puisse être possible à partir du script d'installation. Mais je suis sûr que c'est possible si vous créez "avant le plugin d'écoute" avec la fonction
beforeSave()
et vérifiez la valeur là-bas.la source