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;