[ 'type' => 'int', 'backend' => '', 'frontend' => '', 'label' => 'XXXX', 'input' => 'text', 'frontend_class' => 'validiere-größer-als-Null', 'source' => '', 'global' => \ Magento \ Eav \ Model \ Entity \ Attribute \ ScopedAttributeInterface :: SCOPE_GLOBAL, 'sichtbar' => wahr, 'Erforderlich' => wahr, 'user_defined' => false, 'default' => 0, 'durchsuchbar' => falsch, 'filterable' => true, 'vergleichbar' => falsch, 'visible_on_front' => false, 'used_in_product_listing' => true, 'unique' => false ]
Ich füge ein benutzerdefiniertes Produktattribut hinzu, das einwandfrei funktioniert, aber keine validate-greater-than-zero
Validierung hinzufügen kann .
Wenn wir Attributeigenschaften in betrachten, Input Validation for Store Owner
gibt es eine begrenzte Anzahl von Überprüfungen in ausgewählten Optionen.
validate-number
, validate-digits
, validate-email
, validate-url
, validate-alpha
,validate-alphanum
Dies sind die einzigen Validierungen, die im Abschnitt Produktattribute angewendet werden.
magento2
javascript
jquery
form-validation
knockoutjs
Amit Singh
quelle
quelle
Antworten:
Eine der Lösungen besteht darin, ein
backend model
zu Ihrem Attribut hinzuzufügen , das zum Formatieren / Validieren Ihres Attributwerts vor dem Speichern und / oder nach dem Laden verwendet wird.Fügen Sie eine Backend-Klasse hinzu:
Hier ist ein Beispiel für Ihre benutzerdefinierte Klasse
\Foo\Bar\Model\Attribute\Backend\YourAttribute
Wenn Sie ein einfaches Beispiel für diese Art von Klasse wünschen, können Sie dies überprüfen
\Magento\Customer\Model\Customer\Attribute\Backend\Website
\Magento\Eav\Model\Entity\Attribute\Backend\AbstractBackend
backend_model
Spalte in dereav_attribute
TabelleBEARBEITEN
Wenn Sie eine Klasse haben möchten, die fast das Gleiche macht wie Sie, können Sie sich die
SKU
Attributvalidierung ansehen.\Magento\Catalog\Model\Product\Attribute\Backend\Sku
Ich habe die Methode auch in die Beispielklasse eingefügt
BEARBEITEN
Eine andere (möglicherweise nicht die beste) Lösung besteht darin, ein Plugin für die Funktion zu erstellen
\Magento\Eav\Helper\Data::getFrontendClasses
und hier Ihre Frontend-Klasse hinzuzufügen, die vorab validiert werden kann.quelle
eav_attribute
Tabelle in der Spalte ansehen,frontend_class
ist das der Wertvalidate-greater-than-zero
?validate-number
,validate-digits
,validate-email
,validate-url
,validate-alpha
,validate-alphanum
.Mit dieser Hilfe habe
Matthéo Geoffray
ich die Frontend-Validierung für benutzerdefinierte Attribute angewendet.Dies ist das benutzerdefinierte Attribut im Installationsskript.
Ich habe das Plugin in di.xml hinzugefügt
Hier ist der Plugin-Code.
Grundsätzlich vergleicht
\Magento\Catalog\Ui\DataProvider\CatalogEavValidationRules
die aufgerufene MethodemapRules
die Frontend-Klasse nur mit einer begrenzten Anzahl von Validierungsregeln. Um weitere Validierungsregeln anzuwenden, müssen Regeln mithilfe des Plugins angehängt werden.Informationen zur serverseitigen Überprüfung finden Sie in der
Matthéo Geoffray
Antwort.quelle
Ich bin mir nicht sicher, ob es mit dem Installationsskript möglich sein könnte. Aber ich bin sicher, es ist möglich, wenn Sie "vor dem Listener-Plugin" mit Funktion erstellen
beforeSave()
und dort den Wert überprüfen.quelle