Archives par mot-clef : framework

Validator Custom pour Entités

10 012012

Exemple de validator custom avec une validation de l’âge sur des dates de naissance :

MonBundle/Validator/Majeur.php

namespace Maboite\MonBundle\Validator;

use Symfony\Component\Validator\Constraint;

/**
* @Annotation
*/

class Majeur extends Constraint
{
public $message = 'Vous devez être majeur-e pour jouer.'; //<- le message par défaut
}

MonBundle/Validator/MajeurValidator.php

namespace Maboite\MonBundle\Validator;

use Symfony\Component\Validator\Constraint;
use Symfony\Component\Validator\ConstraintValidator;

class MajeurValidator extends ConstraintValidator
{
    public function isValid($value, Constraint $constraint)
    {
        $now=new \DateTime("now");
        $diff=$value->diff($now);
       
        // ( le test sur l'année ne suffit pas car diff renvoie une "vraie" différence tenant compte des années bisextiles )
        if ($diff->y == 18) {
            if ($diff->m > 1) return true;
            if (intval($now->format('j')) >= intval($value->format('j'))) return true;
        } else {
        if ($diff->y > 18) {
            return true;
        }
        }
       
        $this->setMessage($constraint->message);
        return false;
       
       
       
    }
}

Dans l’entité concernée on peut utiliser la validation :

MonBundle/Entity/User.php

....
use Symfony\Component\Validator\Constraints as Assert;
use Symfony\Bridge\Doctrine\Validator\Constraints as DoctrineAssert;

use Maboite\MonBundle\Validator\Majeur as Majeur;

....

/**
* @var date $datenaissance
*
* @ORM\Column( type="date")
* @Assert\NotBlank(message="Veuillez saisir votre date de naissance.")
* @Majeur(message="Vous devez être majeur-e pour jouer.")
*/

private $datenaissance;

voilà maintenant la contrainte fonctionnera comme les contraintes prédéfinies lors de vos appels à $form->isValid()

Publié dans Symfony | Marqué avec , , , , , , | Laisser un commentaire