Benutzerdefinierte Feldüberprüfung in system.xml


9

Ich entwickle das Magento2-Plugin (ich bin ein bisschen neu in Magento2) und bin auf ein Problem mit der Validierung des Felds in system.xml gestoßen. Ich habe lange gesucht und keine Antwort gefunden. Ich habe ein neues Feld hinzugefügt, muss dieses Feld jedoch mithilfe des regulären Ausdrucks überprüfen. Ich habe gesehen, dass es eine Standardvalidierung gibt, aber ich benötige eine benutzerdefinierte. Gibt es eine Möglichkeit, dem Validator eine neue Validierungsregel hinzuzufügen?


1
Welche Art von Validierung müssen Sie durchführen?
Dhiren Vasoya

Antworten:


4

Grundsätzlich müssen Sie Ihre benutzerdefinierte Validierungsmethode registrieren und dann für Ihr Feld in der system.xmlDatei verwenden.

Definieren Sie Ihre Validierungsmethode:

jQuery.validator.addMethod(
    "validate-custom", 
    function (v) {
        return jQuery.mage.isEmptyNoTrim(v) || /^[1-4]+$/.test(v);
     },
    'Please use digits only (1-4) in this field.'
);

Und verwenden Sie es für Ihr Fachgebiet in system.xml:

<validate>validate-number validate-zero-or-greater validate-custom</validate>

Suchen Sie im Magento 2-Kerncode nach "validator.addMethod". Dort finden Sie eine Reihe von Beispielen, die komplexere Anwendungsfälle zeigen.


Ich versuche diesen Weg zu benutzen, aber ich arbeite nicht magento.stackexchange.com/questions/262645/…
Chirag Patel

9

Wie @Wojtek Naruniec schreibt, müssen Sie Ihre eigene benutzerdefinierte Validierungsmethode in einer Javascript-Datei erstellen und in Ihrem Modulkonfigurationsfeld in der Datei system.xml verwenden.

Angenommen, Ihr Feld ist wie folgt:

<field id="color" translate="label comment" type="text" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1">
    <label>Color</label>
    <comment>Exadecimal value, without #: ex. FFFFFF</comment>
</field>

und Sie möchten die Feldlänge (genau 6 Zeichen) überprüfen.

Erstellen Sie Ihre Javascript-Datei,

Herstellername / Modulname / Ansicht / Adminhtml / Web / Js / Validierung.js

zum Beispiel:

require([
    'jquery',
    'mage/translate',
    'jquery/validate'],
    function($){
        $.validator.addMethod(
            'validate-exadecimal-color-length', function (v) {
                return (v.length == 6);
            }, $.mage.__('Field must have length of 6'));
    }
);

Laden Sie dann die Javascript-Datei auf die Administrationskonfigurationsseite, damit Sie die Datei generieren müssen

Herstellername / Modulname / Ansicht / adminhtml / layout / adminhtml_system_config_edit.xml

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
    <head>
        <link src="vendorName_moduleName::js/validation.js"/>
    </head>
</page>

Jetzt können Sie mit Ihrem Validator ein <validate>Tag zum <field>Tag Ihrer system.xml- Datei hinzufügen :

<field id="color" translate="label comment" type="text" sortOrder="3" showInDefault="1" showInWebsite="1" showInStore="1">
    <label>Color</label>
    <validate>validate-exadecimal-color-length</validate>
    <comment>Exadecimal value, without #: ex. FFFFFF</comment>
</field>

1
Dies sollte die akzeptierte Antwort sein. Viel gründlicher.
Ethan Yehuda
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.