Validateur:ref:

Les validateurs sont utilisés pour vérifier la valeur des champs envoyés à la soumission d'un formulaire. Leur comportement est quasiment identique aux validateurs classiques de TYPO3, mais ils disposent de quelques fonctionnalités supplémentaires.

Pour configurer les validateurs utilisables dans la configuration des formulaires, consultez le chapitre « Validateurs ».

Vous avez la possibilité de créer vos propres validateurs selon vos besoins ; veillez à ce qu'ils aient comme parent Romm\Formz\Validation\Validator\AbstractValidator, et à utiliser correctement les fonctions de l'API.

API

Les validateurs de FormZ vous donnent accès aux variables/fonctions suivantes :


Instance du formulaire:ref:

Propriété

protected $form;

Type

Romm\Formz\Form\FormInterface

Description

Vous avez accès via $this->form à l'instance du formulaire soumis. Cela vous permet par exemple d'appliquer certaines règles en fonction des valeurs d'autres champs du formulaire.

Avertissement

$this->form a un accès en lecture seule, vous ne pouvez pas modifier les valeurs des champs.

Nom du champ:ref:

Propriété

protected $fieldName;

Type

string

Description

Contient le nom du champ qui est actuellement validé par ce validateur.

Liste des messages supportés:ref:

Propriété

protected $supportedMessages = [];

Type

array

Description

Dans FormZ, les validateur fonctionnent avec des messages pré-configurés. En effet, un validateur peut renvoyer différents messages d'erreurs ; il devra définir à l'avance quels messages sont utilisables : une clé de message, et sa configuration.

Utilisez la variable de classe $supportedMessages pour définir la liste de messages d'erreurs utilisés par le validateur. Inspirez-vous de l'exemple suivant pour respecter la structure :

Les valeurs de ces messages pourront être surchargés par la configuration TypoScript des champs de formulaires.

protected $supportedMessages = [
   // "default" est l'index du message.
   'default'    => [
      // "key" représente la clé LLL du message.
      'key'        => 'validator.form.contains_values.error',

      // "extension" contient le nom de l'extension utilisée pour
      // retrouver la clé LLL du message.
      // Si vide, l'extension "FormZ" est utilisée.
      'extension'    => null
   ],
   'test'    => [
      // Si vous renseignez "value", la valeur sera directement
      // utilisée et le système ne cherchera pas de traduction.
      'value'        => 'Test de message !'
   ]
];

Supporter tous les messages:ref:

Propriété

protected $supportsAllMessages = false;

Type

bool

Description

Si jamais votre validateur doit ajouter dynamiquement des messages d'erreurs (par exemple lors de l'utilisation d'un web service), vous pouvez passer cette valeur à true. Préférez la laisser à false par défaut, si vous n'êtes pas certain d'en avoir besoin.

Ajouter un erreur:ref:

Fonction

$this->addError($key, $code, array $arguments);

Retour

/

Paramètres

  • $key : la clé du message, doit être une clé du tableau $supportedMessages.
  • $code : le code de l'erreur, par convention il s'agira du timestamp actuel au moment où le développeur rajoute l'erreur.
  • $arguments : les éventuels arguments qui seront remplacés dans le texte du message.

Description

Vous devrez utiliser cette fonction pour rajouter une erreur si la valeur ne passe pas la validation.

Enregistrer un tableau d'information:ref:

Fonction

$this->setValidationData(array $validationData);

Retour

/

Paramètres

  • $validationData : tableau de données arbitraires à enregistrer.

Description

Lorsqu'un validateur est utilisé sur un champ de formulaire, vous pouvez vouloir mettre de côté quelques informations arbitraires pour une utilisation future. Il s'agit d'un simple tableau pouvant contenir n'importe quelle information. Ce tableau sera injecté dans l'instance du formulaire ($this->form) à la fin du processus du validateur.

Enregistrer une valeur dans le tableau d'information:ref:

Fonction

$this->setValidationDataValue($key, $value);

Retour

/

Paramètres

  • $key : clé de la valeur arbitraire à enregistrer.
  • $value : valeur arbitraire à enregistrer.

Description

Pareil qu'au dessus, mais pour une simple entrée dans le tableau.

Lier un fichier JavaScript:ref:

Propriété

protected static $javaScriptValidationFiles = [];

Type

array

Description

Contient la liste des fichiers JavaScript qui émuleront ce validateur dans le navigateur du client. Remplissez juste ce tableau, FormZ s'occupera de les importer automatiquement.

Ces fichiers devront contenir la déclaration de la version JavaScript du validateur en question, en utilisant la fonction Fz.Validation.registerValidator().

Exemple :

protected static $javaScriptValidationFiles = [
    'EXT:formz/Resources/Public/JavaScript/Validators/Formz.Validator.Required.js'
];

Exemple de validateur

Vous retrouverez ci-dessous un exemple de validateur.

<?php
namespace Romm\Formz\Validation\Validator;

use Romm\Formz\Validation\Validator\AbstractValidator;

class ContainsValuesValidator extends AbstractValidator {
    /**
     * @inheritdoc
     */
    protected $supportedOptions = [
       'values' => [
          [],
          'The values that are accepted',
          'array',
          true
       ]
    ];

    /**
     * @inheritdoc
     */
    protected $supportedMessages = [
       'default'    => [
          'key'        => 'validator.form.contains_values.error',
          'extension'    => null
       ]
    ];

    /**
     * @inheritdoc
     */
    public function isValid($valuesArray)
    {
       $flag = false;

       if (is_array($valuesArray)) {
          foreach ($valuesArray as $value) {
             if (in_array($value, $this->options['values'])) {
                $flag = true;
                break;
             }
          }
       }

       if (false === $flag) {
          $this->addError(
             'default'
             1445952458,
             [implode(
               ', ',
               $this->options['values']
            )]
          );
       }
    }
}