Magento 2 - Validação de Formulário

32

existe uma visão geral dos novos atributos de validação de formulário no Magento 2?

ClassMP
fonte

Respostas:

37

Você pode adicionar classe para validação no Magento 2. Veja o exemplo abaixo. Existem quase 72 regras (classe de validação) que você pode usar:

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

Consulte o blog para obter uma lista das regras disponíveis para obter mais informações:

Aqui está uma lista de regras de classes de validações suportadas pelo magento 2. Você só precisa adicionar a classe css para que a regra seja aplicada.

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
nikunj gandhi
fonte
2
Existe algum exemplo de como usar padrão? tnx
Antonio Pedicini 27/09/17
35

Existem 3 maneiras diferentes de usar a validação de formulário no magento 2

Para habilitar a validação de javascript, use o seguinte código no seu modelo

<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>

* formulário personalizado é o ID do formulário, você pode substituí-lo pelo seu ID do formulário

Lista de regras de validação de formulário

Para finalizar este artigo, uma lista de nomes de regras de validação é fornecida aqui como uma referência rápida para a documentação oficial:

Regras do 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

Regras do jQuery:

required,

remote,

email,

url,

date,

dateISO,

number,

digits,

creditcard,

equalTo,

maxlength,

minlength,

rangelength,

range,

max,

min

consulte http://inchoo.net/magento-2/validate-custom-form-in-magento-2/

Vaibhav Ahalpara
fonte
Quero aplicar a validação do lado do servidor em magento 2can você pls share me qualquer link ou doc,
Khushbu_sipl
Acho que você já perguntou pergunta aqui magento.stackexchange.com/questions/161300/... maio deste link de outro tipo de ajuda
Vaibhav Ahalpara
9

Nos componentes da interface do usuário, ele pode ser usado seguindo a configuração de exemplo (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>

Veja mais exemplos no arquivo:
vendor/magento/module-cms/view/adminhtml/ui_component/cms_page_form.xml

A lista de validadores em Componentes da interface do usuário pode ser encontrada em
vendor/magento/module-ui/view/base/web/js/lib/validation/rules.js.

Acabei de escrever este script para pegar todas as chaves com mensagens de erro para explicação:

  • entrada obrigatória:
    este é um campo obrigatório.
  • validar alfanum com espaços:
    use apenas letras (az ou AZ), números (0-9) ou espaços apenas neste campo.
  • phoneUK:
    especifique um número de telefone válido
  • validate-email:
    Digite um endereço de email válido (por exemplo: [email protected]).
  • ipv4:
    digite um endereço IP v4 válido.
  • verificado:
    este é um campo obrigatório.
  • validar seleção:
    selecione uma opção.
  • ipv6:
    Digite um endereço IP v6 válido.
  • time:
    Digite um horário válido, entre 00:00 e 23:59
  • validar número:
    digite um número válido neste campo.
  • validate-phoneLax:
    Digite um número de telefone válido. Por exemplo (123) 456-7890 ou 123-456-7890.
  • dateITA:
    Digite uma data correta
  • validate-xml-identifier:
    Digite um identificador XML válido (Ex: something_1, block5, id-4).
  • validate-clean-url:
    insira um URL válido. Por exemplo, http://www.example.com ou www.example.com.
  • validate-admin-password:
    Digite 7 ou mais caracteres, usando tanto numéricos quanto alfabéticos.
  • validate-no-html-tags:
    tags HTML não são permitidas.
  • validate-integer:
    insira um número inteiro válido neste campo.
  • validar dados:
    use apenas letras (az ou AZ), números (0-9) ou sublinhado (_) neste campo, e o primeiro caractere deve ser uma letra.
  • validate-cc-ukss:
    Digite o número do problema ou a data de início do tipo de switch / cartão solo.
  • min-words:
    digite pelo menos {0} palavras.
  • alfanumérico: apenas
    letras, números, espaços ou sublinhados
  • validar identificador:
    insira uma chave de URL válida (por exemplo: "página de exemplo", "página de exemplo.html" ou "página de outro nível / página de exemplo").
  • validate-street:
    use apenas letras (az ou AZ), números (0-9), espaços e "#" neste campo.
  • validate-zip-international:
    insira um código postal válido.
  • validate-date:
    insira uma data válida.
  • validar maior que zero:
    Digite um número maior que 0 neste campo.
  • validar dígitos:
    digite um número válido neste campo.
  • validate-ssn:
    Digite um número válido de previdência social (Ex: 123-45-6789).
  • valor não negativo:
    digite um número positivo neste campo.
  • validate-max-size: o
    arquivo que você está tentando enviar excede o limite máximo de tamanho.
  • validate-fax:
    Digite um número de fax válido (Ex: 123-456-7890).
  • validate-se-tag-script-existir:
    Por favor, use a tag SCRIPT com o atributo SRC ou com o conteúdo adequado para incluir JavaScript no documento.
  • min_text_length:
    Digite mais ou igual a {0} símbolos.
  • validate-date-au:
    use este formato de data: dd / mm / aaaa. Por exemplo, 17/03/2006, para 17 de março de 2006.
  • mobileUK:
    especifique um número de celular válido
  • letters-with-basic-punc:
    somente letras ou pontuação
  • validate-number-range:
    o valor não está dentro do intervalo especificado.
  • phoneUS:
    especifique um número de telefone válido
  • date_range_max:
    a data não está dentro do intervalo especificado.
  • validate-range:
    o valor não está dentro do intervalo especificado.
  • vinUS:
    O número de identificação do veículo especificado (VIN) é inválido.
  • range-words:
    digite entre {0} e {1} palavras.
  • validate-zip-us:
    Digite um CEP válido (Ex: 90602 ou 90602-1234).
  • validar e-mails:
    insira endereços de e-mail válidos, separados por vírgulas. Por exemplo, [email protected], [email protected].
  • validate-css-length:
    insira um comprimento de CSS válido (Ex: 100px, 77pt, 20em, .5ex ou 50%).
  • zip-range:
    seu CEP deve estar no intervalo de 902xx-xxxx a 905-xx-xxxx
  • validate-phoneStrict:
    digite um número de telefone válido. Por exemplo (123) 456-7890 ou 123-456-7890.
  • dateNL:
    Vul hier een geldige datum in.
  • somente
    letras : somente letras, por favor
  • max_text_length:
    digite menos ou igual a {0} símbolos.
  • validar número não negativo:
    digite um número 0 ou mais neste campo.
  • validar por lista de valores de página:
    insira um valor válido, por exemplo: 10,20,30
  • sem espaço em branco:
    sem espaço em branco, por favor
  • validar estado:
    Por favor, selecione Estado / Província.
  • validate-url:
    insira um URL válido. É necessário um protocolo (http: //, https: // ou ftp: //).
  • date_range_min:
    a data não está dentro do intervalo especificado.
  • validate-digits-range:
    o valor não está dentro do intervalo especificado.
  • maior que igual a:
    Digite um valor maior ou igual a {0}.
  • validate-no-empty:
    valor vazio.
  • validar-zero-ou-maior:
    Digite um número 0 ou maior neste campo.
  • validate-cc-number:
    digite um número de cartão de crédito válido.
  • validate-emailSender:
    Digite um endereço de email válido (por exemplo: [email protected]).
  • validate-new-password:
    Digite 6 ou mais caracteres. Os espaços à esquerda e à direita serão ignorados.
  • validate-customer-password: o
    comprimento mínimo desse campo deve ser igual ou superior a% 1 símbolos. Os espaços à esquerda e à direita serão ignorados.
  • validar senha:
    Digite 6 ou mais caracteres. Os espaços à esquerda e à direita serão ignorados.
  • menor que igual a:
    Digite um valor menor ou igual a {0}.
  • validate-currency-dollar:
    insira um valor válido de $. Por exemplo, US $ 100,00.
  • time12h:
    Digite um horário válido, entre 00:00 e 12:00
  • validate-alphanum:
    Use apenas letras (az ou AZ) ou números (0-9) neste campo. Não são permitidos espaços ou outros caracteres.
  • validate-item-Quantity:
    não reconhecemos ou suportamos este tipo de extensão de arquivo.
  • validar código:
    use apenas letras (az), números (0-9) ou sublinhado (_) neste campo, e o primeiro caractere deve ser uma letra.
  • email2:
    digite um número de cartão de crédito válido.
  • max-words:
    digite {0} palavras ou menos.
  • stripped-min-length:
    digite pelo menos {0} caracteres
  • validate-alpha:
    use apenas letras (az ou AZ) neste campo.
  • padrão:
    formato inválido.
  • número inteiro:
    um número não decimal positivo ou negativo, por favor

O script:

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
Kirby
fonte
3

Se você fizer referência à página / customer / account / create, poderá ver o seguinte trecho de código abaixo do formulário:

<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>

E se você verificar os atributos de entrada do formulário, poderá ver o Magento 1 como classvalores de atributos, juntamente com o novo data-validateatributo. Esta pode ser a base para acelerar.

Arquivos de chaves para validação:

Mago Psico
fonte
Thx pela resposta. Também achei o novo atributo validar dados, mas é interessante quais validações estão disponíveis. No meu caso, quero validar uma caixa de seleção e um conjunto de RadioButton
ClassMP
Eu quero aplicar a validação do lado do servidor no magento 2, por favor, compartilhe-me qualquer link ou documento.
21417 Khushbu_sipl
2

Ao usar os componentes da interface do usuário para criar o formulário, podemos usar a validação como abaixo, funciona no Magento 2.1.x, ainda não o testei em outra versão.

<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>

Observe a validação item, em que nós poderíamos adicionar regras de validação , como required-entry, validate-integeretc.

<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>

Todas as regras de validação que você poderia encontrar em um arquivo vendor/magento/module-ui/view/base/web/js/lib/validation/rules.js, como validate-date, validate-emailsetc.

Key Shang
fonte
1

Eu tenho o mesmo requisito para validação de formulário Magento2 e eu fiz este código

Primeiro vamos configurar um formulário de teste

<!-- 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>

Para habilitar a validação javascript da validação de formulário do Magento2

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

Referência :: http://www.onlinecode.org/magento2-form-validation-example/

Dhaval Dave
fonte
0

A opção "no-whitespace" não funciona corretamente (pelo menos no Magento 2.1). Ele dispara uma mensagem de erro em qualquer tipo de caractere "espaço". Os valores "test me" e "test me" retornarão o mesmo erro.

Stanislav Spuzyak
fonte