Magento 2 - Валідація форми


Відповіді:


37

Ви можете додати клас для перевірки в Magento 2. Дивіться приклад нижче. Існує майже 72 правила (клас перевірки), якими ви можете користуватися:

$fieldset->addField(
    'email_from',
    'text',
    ['name' => 'email_from', 'label' => __('Email From'), 'title' => __('Email From'), 'required' => true, 'class' => 'validate-email']
);

Щоб отримати докладнішу інформацію, дивіться у блозі список доступних правил :

Ось список правил класів перевірок, які підтримує magento 2. Вам просто потрібно додати клас css, щоб правило застосовувалося.

min_text_length
max_text_length
max-words
min-words
range-words
letters-with-basic-punc
alphanumeric
letters-only
no-whitespace
zip-range
integer
vinUS
dateITA
dateNL
time
time12h
phoneUS
phoneUK
mobileUK
stripped-min-length
email2
url2
credit-card-types
ipv4
ipv6
pattern
validate-no-html-tags
validate-select
validate-no-empty
validate-alphanum-with-spaces
validate-data
validate-street
validate-phoneStrict
validate-phoneLax
validate-fax
validate-email
validate-emailSender
validate-password
validate-admin-password
validate-url
validate-clean-url
validate-xml-identifier
validate-ssn
validate-zip-us
validate-date-au
validate-currency-dollar
validate-not-negative-number
validate-zero-or-greater
validate-greater-than-zero
validate-css-length
validate-number
validate-number-range
validate-digits
validate-digits-range
validate-range
validate-alpha
validate-code
validate-alphanum
validate-date
validate-identifier
validate-zip-international
validate-state
less-than-equals-to
greater-than-equals-to
validate-emails
validate-cc-number
validate-cc-ukss
required-entry
checked
not-negative-amount
validate-per-page-value-list
validate-new-password
validate-item-quantity
equalTo

2
чи є приклад, як використовувати шаблон? tnx
Антоніо Педікіні

35

Існує 3 різних способи використання перевірки форми в magento 2

Щоб увімкнути перевірку javascript, використовуйте наступний код у вашому шаблоні

<form class="form" id="custom-form" method="post" autocomplete="off">
 <fieldset class="fieldset">
     <legend class="legend"><span><?php echo __('Personal Information') ?></span></legend><br>
      <div class="field required">
          <label for="email_address" class="label"><span><?php echo __('Email') ?></span></label>
          <div class="control">
              <input type="email" name="email" id="email_address" value="" title="<?php echo __('Email') ?>" class="input-text" data-validate="{required:true, 'validate-email':true}">
          </div>
      </div>
 </fieldset>
 <div class="actions-toolbar">
      <div class="primary">
          <button type="submit" class="action submit primary" title="<?php  echo __('Submit') ?>"><span><?php echo __('Submit') ?></span></button>
      </div>
  </div>
</form>

1

<script type="text/x-magento-init">
    {
        "#custom-form": {
            "validation": {}
        }
    }
</script>

2

<form data-mage-init='{"validation": {}}' class="form" id="custom-form" method="post" autocomplete="off">

3

<script type="text/javascript">
require([
    'jquery',
    'mage/mage'
], function($){

   var dataForm = $('#custom-form');
   dataForm.mage('validation', {});

});
</script>

* custom-form є ідентифікатором форми, ви можете замінити його своїм ідентифікатором форми

Список правил перевірки форми

Щоб завершити цю статтю, тут наведено список імен правил перевірки як швидке посилання на офіційну документацію:

Правила Magento:

validate-no-html-tags

validate-select

validate-no-empty

validate-alphanum-with-spaces

validate-data

validate-street

validate-phoneStrict

validate-phoneLax

validate-fax

validate-email

validate-emailSender

validate-password

validate-admin-password

validate-customer-password

validate-url

validate-clean-url

validate-xml-identifier

validate-ssn

validate-zip-us

validate-date-au

validate-currency-dollar

validate-not-negative-number

validate-zero-or-greater

validate-greater-than-zero

validate-css-length

validate-number

required-number

validate-number-range

validate-digits

validate-digits-range

validate-range

validate-alpha

validate-code

validate-alphanum

validate-date

validate-date-range

validate-cpassword

validate-identifier

validate-zip-international

validate-one-required

validate-state

required-file

validate-ajax-error

validate-optional-datetime

validate-required-datetime

validate-one-required-by-name

less-than-equals-to

greater-than-equals-to

validate-emails

validate-cc-type-select

validate-cc-number

validate-cc-type

validate-cc-exp

validate-cc-cvn

validate-cc-ukss

validate-length

required-entry

not-negative-amount

validate-per-page-value-list

validate-per-page-value

validate-new-password

required-if-not-specified

required-if-all-sku-empty-and-file-not-loaded

required-if-specified

required-number-if-specified

datetime-validation

required-text-swatch-entry

required-visual-swatch-entry

required-dropdown-attribute-entry

Validate-item-quantity

validate-grouped-qty

validate-one-checkbox-required-by-name

validate-date-between

validate-dob

max-words

min-words

range-words

letters-with-basic-punc

alphanumeric

letters-only

no-whitespace

zip-range

integer

vinUS

dateITA

dateNL

time

time12h

phoneUS

phoneUK

mobileUK

stripped-min-length

email2

url2

credit-card-types

ipv4

ipv6

pattern

allow-container-className

Правила jQuery:

required,

remote,

email,

url,

date,

dateISO,

number,

digits,

creditcard,

equalTo,

maxlength,

minlength,

rangelength,

range,

max,

min

зверніться до http://inchoo.net/magento-2/validate-custom-form-in-magento-2/


Я хочу застосувати перевірку на стороні сервера в magento 2може, будь ласка, поділіться будь-яким посиланням чи документом,
Khushbu_sipl

Я думаю, ви вже задавали тут питання magento.stackexchange.com/questions/161300/…. Нехай це посилання допоможе іншим
Vaibhav Ahalpara

9

У компонентах користувальницького інтерфейсу його можна використовувати за допомогою наступного конфігураційного зразка (Magento v2.2.0):

<form xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Ui:etc/ui_configuration.xsd">
    <fieldset name="general">
        <field name="priority" sortOrder="1000" formElement="input">
            <settings>
                <validation>
                    <rule name="not-negative-amount" xsi:type="boolean">true</rule>
                </validation>
                [...]
            </settings>
        </field>
    </fieldset>
</form>

Дивіться більше прикладів у файлі:
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_form.xml

Список валідаторів у компонентах інтерфейсу, який ви можете знайти в ньому
vendor/magento/module-ui/view/base/web/js/lib/validation/rules.js.

Просто написав цей скрипт, щоб схопити всі клавіші із повідомленнями про помилки для пояснення:

  • обов'язкове введення:
    Це обов'язкове поле.
  • validate-alphanum-with-интервал:
    Будь ласка, використовуйте лише літери (az або AZ), цифри (0-9) або пробіли лише в цьому полі.
  • phoneUK:
    Будь ласка, вкажіть дійсний номер телефону
  • підтвердити електронну пошту:
    введіть дійсну адресу електронної пошти (наприклад: johndoe@domain.com).
  • ipv4:
    Введіть дійсну IP-адресу v4.
  • Позначено:
    це поле обов'язкове.
  • validdate-select:
    Виберіть опцію.
  • ipv6:
    Введіть дійсну IP-адресу v6.
  • час:
    введіть дійсний час між 00:00 та 23:59
  • validate-number:
    Будь ласка, введіть дійсне число в цьому полі.
  • validate-phoneLax:
    Введіть дійсний номер телефону. Наприклад (123) 456-7890 або 123-456-7890.
  • dateITA:
    Введіть правильну дату
  • validate-xml-ідентифікатор:
    Будь ласка, введіть дійсний XML-ідентифікатор (напр .: щось_1, блок5, id-4).
  • validate-clean-url:
    Введіть дійсну URL-адресу. Наприклад, http://www.example.com або www.example.com.
  • validate-admin-password:
    Введіть 7 або більше символів, використовуючи як цифрові, так і алфавітні.
  • validate-no-html-tags:
    HTML-теги заборонені.
  • validate-integer:
    Введіть дійсне ціле число в це поле.
  • validate-data:
    Будь ласка, використовуйте в цьому полі лише літери (az або AZ), цифри (0-9) або підкреслення (_), і першим символом має бути літера.
  • validate-cc-ukss:
    Введіть номер випуску чи дату початку для типу комутатора / сольної картки.
  • хв. слів:
    Будь ласка, введіть принаймні {0} слів.
  • буквено-цифрові:
    Букви, цифри, пробіли або підкреслення лише будь ласка
  • validate-ідентифікатор:
    Будь ласка, введіть дійсний ключ URL-адреси (наприклад: "example-page", "example-page.html" або "Anotherlevel / example-page").
  • validate-street:
    Будь ласка, використовуйте в цьому полі лише літери (az або AZ), цифри (0-9), пробіли та "#".
  • validate-zip-international:
    Введіть дійсний поштовий індекс.
  • дата підтвердження:
    введіть дійсну дату.
  • валідація-більша від нуля:
    Будь ласка, введіть число, більше 0, у цьому полі.
  • validdate-цифри:
    Будь ласка, введіть у цьому полі дійсне число.
  • validate-ssn:
    Будь ласка, введіть дійсний номер соціального страхування (Приклад: 123-45-6789).
  • невід'ємна сума:
    Будь ласка, введіть позитивне число в цьому полі.
  • validate-max-size:
    Файл, який ви намагаєтеся завантажити, перевищує максимальний розмір файлу.
  • підтвердження факсу:
    введіть дійсний номер факсу (Приклад: 123-456-7890).
  • validate-if-tag-script-съществува:
    Будь ласка, використовуйте тег SCRIPT з атрибутом SRC або з належним вмістом, щоб включити JavaScript в документ.
  • min_text_length:
    Будь ласка, введіть більше або рівне {0} символів.
  • validate-date-au:
    Будь ласка, використовуйте цей формат дати: dd / mm / yyyy Наприклад, 17/03/2006 за 17 березня 2006 року.
  • mobileUK:
    Вкажіть дійсний номер мобільного телефону
  • букви з основним пунктом:
    Букви або розділові знаки, тільки будь ласка
  • validate-number-range:
    Значення не знаходиться у вказаному діапазоні.
  • phoneUS:
    Вкажіть дійсний номер телефону
  • date_range_max:
    дата не знаходиться у визначеному діапазоні.
  • validate-range:
    значення не знаходиться у вказаному діапазоні.
  • vinUS:
    Вказаний ідентифікаційний номер транспортного засобу (VIN) недійсний.
  • слова-діапазон:
    введіть від {0} до {1} слів.
  • validate-zip-us:
    Будь ласка, введіть дійсний поштовий індекс (напр .: 90602 або 90602-1234).
  • validdate-email:
    Будь ласка, введіть дійсні адреси електронної пошти, розділені комами. Наприклад, johndoe@domain.com, johnsmith@domain.com.
  • validate-css-length:
    Будь ласка, введіть дійсну довжину CSS (напр .: 100px, 77pt, 20em, .5ex або 50%).
  • zip-range:
    Ваш поштовий індекс повинен бути в межах від 902xx-xxxx до 905-xx-xxxx
  • validate-phoneStrict:
    Введіть дійсний номер телефону. Наприклад (123) 456-7890 або 123-456-7890.
  • dateNL:
    Vul hier een geldige date in.
  • лише для
    листів : Листи, будь ласка
  • max_text_length:
    Будь ласка, введіть менше або рівне {0} символів.
  • validdate-not-negative-number:
    Введіть у це поле число 0 або більше.
  • validate-per-page-value-list:
    Будь ласка, введіть дійсне значення, напр .: 10,20,30
  • не-пробіл:
    Немає пробілів
  • validate-state:
    Виберіть штат / провінцію.
  • validate-url:
    Введіть дійсну URL-адресу. Потрібен протокол (http: //, https: // або ftp: //).
  • date_range_min:
    дата не знаходиться у визначеному діапазоні.
  • validate-цифр-діапазон:
    значення не знаходиться у вказаному діапазоні.
  • більший за рівний до:
    Будь ласка, введіть значення, що перевищує {0}.
  • validate-no-empty:
    Порожнє значення.
  • валідація нуля або більше:
    Будь ласка, введіть число 0 або більше в цьому полі.
  • validate-cc-номер:
    Введіть дійсний номер кредитної картки.
  • validate-emailSender:
    Введіть дійсну адресу електронної пошти (наприклад: johndoe@domain.com).
  • validate-new-password:
    Введіть 6 або більше символів. Провідні та кінцеві пробіли будуть ігноровані.
  • validate-customer-password:
    Мінімальна довжина цього поля повинна бути дорівнює або перевищує% 1 символів. Провідні та кінцеві пробіли будуть ігноровані.
  • validdate-password:
    Введіть 6 або більше символів. Провідні та кінцеві пробіли будуть ігноровані.
  • менше, ніж дорівнює:
    Будь ласка, введіть значення, менше або рівне {0}.
  • валіда-валюта-долар:
    введіть дійсну суму $. Наприклад, $ 100,00.
  • time12h:
    введіть дійсний час між 00:00 та 12:00
  • validate-alphanum:
    Будь ласка, використовуйте в цьому полі лише літери (az або AZ) або цифри (0-9). Не допускаються пробіли та інші символи.
  • validate-item-number:
    ми не розпізнаємо або підтримуємо цей тип розширення файлу.
  • validate-code:
    Будь ласка, використовуйте в цьому полі лише літери (az), цифри (0-9) або підкреслення (_), і першим символом має бути літера.
  • email2:
    Введіть дійсний номер кредитної картки.
  • максимум слів:
    введіть {0} або менше слів.
  • смугастий-мінімум:
    введіть щонайменше {0} символів
  • validate-alpha:
    Будь ласка, використовуйте в цьому полі лише літери (az або AZ).
  • шаблон:
    невірний формат.
  • ціле:
    Позитивне чи від’ємне недесяткове число, будь ласка

Сценарій:

declare -A list
key=''
while IFS= read -r line; do
#  echo "${line} -"
  if [ -z "${key:-}" ]; then
    # match validation key
    match=$(echo "${line}" | grep -Eo "^        ['\"]([A-Za-z0-9-]|_)+" | tr -d "' ")
    if [ -n "${match}" ]; then
      key=${match}
    fi
  else
    # match message
    match=$(echo "${line}" | sed -rn "s|.*\\$\.mage\.__[(]['\"](.*)['\"][)].*|\1|p")
    if [ -n "${match}" ]; then
      list[${key}]=${match}
      key=''
    fi
  fi
done < "${DOCROOT_DIR:-/var/www/html}/vendor/magento/module-ui/view/base/web/js/lib/validation/rules.js"

for i in "${!list[@]}"
do
  printf "%s:\n    %s\n" "${i}" "${list[$i]}"
done

3

Якщо ви посилаєтесь на сторінку / customer / account / create, ви можете побачити наступний фрагмент коду під формою:

<script>
require([
    'jquery',
    'mage/mage'
], function($){

    var dataForm = $('#form-validate');
    var ignore = null;

    dataForm.mage('validation', {
            ignore: ignore ? ':hidden:not(' + ignore + ')' : ':hidden'
        }).find('input:text').attr('autocomplete', 'off');

});
</script>

А якщо перевірити вхідні атрибути форми, ви можете побачити classзначення атрибутів Magento 1, як і новіdata-validate атрибут. Це може бути основою для активізації.

Клавіші файлів для перевірки:


Thx для відповіді. Я також знайшов новий атрибут даних для перевірки, але цікаво, які перевірки доступні. У моєму випадку я хочу перевірити прапорець і набір RadioButton
ClassMP

Я хочу застосувати перевірку на стороні сервера в magento 2, чи можете ви поділитися мені будь-яким посиланням або документом.
Khushbu_sipl

2

Коли ми використовуємо компоненти інтерфейсу для створення форми, ми можемо використовувати перевірку, як показано нижче, вона працює в Magento 2.1.x, я ще не тестував її в іншій версії.

<field name="priority">
    <argument name="data" xsi:type="array">
        <item name="config" xsi:type="array">
            <item name="dataType" xsi:type="string">text</item>
            <item name="label" xsi:type="string" translate="true">Priority</item>
            <item name="formElement" xsi:type="string">input</item>
            <item name="source" xsi:type="string">module_name</item>
            <item name="dataScope" xsi:type="string">priority</item>
            <item name="validation" xsi:type="array">
                <item name="required-entry" xsi:type="boolean">true</item>
                <item name="validate-integer" xsi:type="boolean">true</item>
            </item>
        </item>
    </argument>
</field>

Зауважте елемент перевірки , в ньому ми могли б додати правила перевірки , наприклад required-entry, validate-integerтощо.

<item name="validation" xsi:type="array">
     <item name="required-entry" xsi:type="boolean">true</item>
     <item name="validate-integer" xsi:type="boolean">true</item>
     <item name="validation_rule_name" xsi:type="boolean">true</item>
     ...
</item>

Усі правила перевірки, які ви можете знайти у файлі vendor/magento/module-ui/view/base/web/js/lib/validation/rules.js, як validate-dateі validate-emailsт.д.


1

У мене є така ж вимога до перевірки форми Magento2, і я зробив цей код

Спочатку ми встановимо тестову форму

<!-- form tag -->
<form class="form" id="custom-form-id" method="post" autocomplete="off">
   <fieldset class="fieldset">
       <legend class="legend"><span><?php echo __('User Personal Information') ?></span></legend><br>
        <div class="field required">
            <!-- form field -->
            <label for="email_address" class="label"><span><?php echo __('Email') ?></span></label>
            <div class="control">
                <input type="email" name="email" id="email_address" value="" title="<?php echo __('Email') ?>" class="input-text" data-validate="{required:true, 'validate-email':true}">
            </div>
        </div>
   </fieldset>
   <!-- submit button -->
   <div class="actions-toolbar">
        <div class="primary">
            <button type="submit" class="action submit primary" title="<?php  echo __('Submit') ?>"><span><?php echo __('Submit') ?></span></button>
        </div>
    </div>
</form>

Щоб увімкнути перевірку javascript для перевірки форми Magento2

<!-- enable javascript validation for custom-form-id -->
<script type="text/x-magento-init">
    {
        "#custom-form-id": {
            "validation": {}
        }
    }
</script>

Довідка :: http://www.onlinecode.org/magento2-form-validation-example/


0

Параметр "no-whitespace" працює неправильно (принаймні, на Magento 2.1). Він запускає повідомлення про помилку на будь-якому типі символу "пробіл". Значення "перевірити мене" та "перевірити мене" повернуть однакову помилку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.