2018-11-23 12:29:20 +00:00
< ? php
/*
* This file is part of the Symfony package .
*
* ( c ) Fabien Potencier < fabien @ symfony . com >
*
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
*/
namespace Symfony\Component\Validator\Constraints ;
use Symfony\Component\Validator\Constraint ;
use Symfony\Component\Validator\ConstraintValidator ;
use Symfony\Component\Validator\Exception\UnexpectedTypeException ;
/**
* @ author Bernhard Schussek < bschussek @ gmail . com >
*/
class CountValidator extends ConstraintValidator
{
/**
* { @ inheritdoc }
*/
public function validate ( $value , Constraint $constraint )
{
2019-01-24 08:00:03 +00:00
if ( ! $constraint instanceof Count ) {
throw new UnexpectedTypeException ( $constraint , __NAMESPACE__ . '\Count' );
}
2018-11-23 12:29:20 +00:00
if ( null === $value ) {
return ;
}
if ( ! \is_array ( $value ) && ! $value instanceof \Countable ) {
throw new UnexpectedTypeException ( $value , 'array or \Countable' );
}
$count = \count ( $value );
if ( null !== $constraint -> max && $count > $constraint -> max ) {
$this -> context -> buildViolation ( $constraint -> min == $constraint -> max ? $constraint -> exactMessage : $constraint -> maxMessage )
-> setParameter ( '{{ count }}' , $count )
-> setParameter ( '{{ limit }}' , $constraint -> max )
-> setInvalidValue ( $value )
-> setPlural (( int ) $constraint -> max )
-> setCode ( Count :: TOO_MANY_ERROR )
-> addViolation ();
return ;
}
if ( null !== $constraint -> min && $count < $constraint -> min ) {
$this -> context -> buildViolation ( $constraint -> min == $constraint -> max ? $constraint -> exactMessage : $constraint -> minMessage )
-> setParameter ( '{{ count }}' , $count )
-> setParameter ( '{{ limit }}' , $constraint -> min )
-> setInvalidValue ( $value )
-> setPlural (( int ) $constraint -> min )
-> setCode ( Count :: TOO_FEW_ERROR )
-> addViolation ();
}
}
}