moux2003
7/16/2013 - 8:13 AM

Validate user age

Validate user age

<?php

namespace Virgin\UserBundle\Validator\Constraints;

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

/**
 * Validate the age given a limit
 * @api
 */
class OverAgeValidator extends ConstraintValidator
{

    public function validate($value, Constraint $constraint)
    {
        if (!$value instanceof \DateTime) {
            throw new UnexpectedTypeException($value, 'DateTime');
        }

        $minimumDate = new \DateTime(date('Y-m-d'));
        $minimumDate->sub(new \DateInterval('P' . $constraint->age . 'Y'));
        $interval = $minimumDate->diff($value);

        $dayDiff = $interval->format('%R%d');

        if ($dayDiff > 0) {
            $this->context->addViolation($constraint->message, array('%age%' => $constraint->age));
        }
    }
}
<?php

namespace Virgin\UserBundle\Validator\Constraints;


use Symfony\Component\Validator\Constraint;

/**
 * @Annotation
 * Class OverAge
 * @package Virgin\UserBundle\Validator\Constraints
 */
class OverAge extends Constraint
{
    public $message = "L'âge minimum requis est %age% ans.";
    public $age = 18;
}
use FOS\UserBundle\Model\User as ModelUser;
use Virgin\UserBundle\Validator\Constraints as VirginAssert;

/**
 * Storage agnostic user object
 *
 * @author Thibault Duplessis <thibault.duplessis@gmail.com>
 * @author Johannes M. Schmitt <schmittjoh@gmail.com>
 */
class User extends ModelUser
{

    /**
     * @var string
     */
    protected $firstname;
    /**
     * @var string
     */
    protected $lastname;
    /**
     * @var string
     */
    protected $title;
    /**
     * @var \DateTime
     * @Assert\NotBlank(message="security.user.dateOfBirth.not.blank",
     *                  groups={"generalPublic"}
     * )
     * @VirginAssert\OverAge(age="18")
     */
    protected $dateOfBirth;