2015-08-17 17:00:26 -07: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 ;
use Symfony\Component\Validator\Context\ExecutionContextInterface as ExecutionContextInterface2Dot5 ;
use Symfony\Component\Validator\Violation\ConstraintViolationBuilderInterface ;
use Symfony\Component\Validator\Violation\LegacyConstraintViolationBuilder ;
/**
* Base class for constraint validators .
*
* @ author Bernhard Schussek < bschussek @ gmail . com >
*/
abstract class ConstraintValidator implements ConstraintValidatorInterface
{
/**
* Whether to format { @ link \DateTime } objects as RFC - 3339 dates
* ( " Y-m-d H:i:s " ) .
*
* @ var int
*/
const PRETTY_DATE = 1 ;
/**
* Whether to cast objects with a " __toString() " method to strings .
*
* @ var int
*/
const OBJECT_TO_STRING = 2 ;
/**
2017-02-02 16:28:38 -08:00
* @ var ExecutionContextInterface2Dot5
2015-08-17 17:00:26 -07:00
*/
protected $context ;
/**
* { @ inheritdoc }
*/
public function initialize ( ExecutionContextInterface $context )
{
$this -> context = $context ;
}
/**
* Wrapper for { @ link ExecutionContextInterface :: buildViolation } that
* supports the 2.4 context API .
*
* @ param string $message The violation message
* @ param array $parameters The message parameters
*
* @ return ConstraintViolationBuilderInterface The violation builder
*
* @ deprecated since version 2.5 , to be removed in 3.0 .
*/
protected function buildViolation ( $message , array $parameters = array ())
{
2015-08-27 12:03:05 -07:00
@ trigger_error ( 'The ' . __METHOD__ . ' is deprecated since version 2.5 and will be removed in 3.0.' , E_USER_DEPRECATED );
2015-08-17 17:00:26 -07:00
if ( $this -> context instanceof ExecutionContextInterface2Dot5 ) {
return $this -> context -> buildViolation ( $message , $parameters );
}
return new LegacyConstraintViolationBuilder ( $this -> context , $message , $parameters );
}
/**
* Wrapper for { @ link ExecutionContextInterface :: buildViolation } that
* supports the 2.4 context API .
*
* @ param ExecutionContextInterface $context The context to use
* @ param string $message The violation message
* @ param array $parameters The message parameters
*
* @ return ConstraintViolationBuilderInterface The violation builder
*
* @ deprecated since version 2.5 , to be removed in 3.0 .
*/
protected function buildViolationInContext ( ExecutionContextInterface $context , $message , array $parameters = array ())
{
2015-08-27 12:03:05 -07:00
@ trigger_error ( 'The ' . __METHOD__ . ' is deprecated since version 2.5 and will be removed in 3.0.' , E_USER_DEPRECATED );
2015-08-17 17:00:26 -07:00
if ( $context instanceof ExecutionContextInterface2Dot5 ) {
return $context -> buildViolation ( $message , $parameters );
}
return new LegacyConstraintViolationBuilder ( $context , $message , $parameters );
}
/**
* Returns a string representation of the type of the value .
*
* This method should be used if you pass the type of a value as
* message parameter to a constraint violation . Note that such
* parameters should usually not be included in messages aimed at
* non - technical people .
*
* @ param mixed $value The value to return the type of
*
* @ return string The type of the value
*/
protected function formatTypeOf ( $value )
{
return is_object ( $value ) ? get_class ( $value ) : gettype ( $value );
}
/**
* Returns a string representation of the value .
*
* This method returns the equivalent PHP tokens for most scalar types
* ( i . e . " false " for false , " 1 " for 1 etc . ) . Strings are always wrapped
* in double quotes ( " ). Objects, arrays and resources are formatted as
2016-04-20 09:56:34 -07:00
* " object " , " array " and " resource " . If the $format bitmask contains
2017-02-02 16:28:38 -08:00
* the PRETTY_DATE bit , then { @ link \DateTime } objects will be formatted
2016-04-20 09:56:34 -07:00
* as RFC - 3339 dates ( " Y-m-d H:i:s " ) .
2015-08-17 17:00:26 -07:00
*
* Be careful when passing message parameters to a constraint violation
* that ( may ) contain objects , arrays or resources . These parameters
* should only be displayed for technical users . Non - technical users
* won ' t know what an " object " , " array " or " resource " is and will be
* confused by the violation message .
*
* @ param mixed $value The value to format as string
* @ param int $format A bitwise combination of the format
* constants in this class
*
* @ return string The string representation of the passed value
*/
protected function formatValue ( $value , $format = 0 )
{
$isDateTime = $value instanceof \DateTime || $value instanceof \DateTimeInterface ;
if (( $format & self :: PRETTY_DATE ) && $isDateTime ) {
if ( class_exists ( 'IntlDateFormatter' )) {
$locale = \Locale :: getDefault ();
$formatter = new \IntlDateFormatter ( $locale , \IntlDateFormatter :: MEDIUM , \IntlDateFormatter :: SHORT );
// neither the native nor the stub IntlDateFormatter support
// DateTimeImmutable as of yet
if ( ! $value instanceof \DateTime ) {
$value = new \DateTime (
$value -> format ( 'Y-m-d H:i:s.u e' ),
$value -> getTimezone ()
);
}
return $formatter -> format ( $value );
}
return $value -> format ( 'Y-m-d H:i:s' );
}
if ( is_object ( $value )) {
2016-04-20 09:56:34 -07:00
if (( $format & self :: OBJECT_TO_STRING ) && method_exists ( $value , '__toString' )) {
2015-08-17 17:00:26 -07:00
return $value -> __toString ();
}
return 'object' ;
}
if ( is_array ( $value )) {
return 'array' ;
}
if ( is_string ( $value )) {
return '"' . $value . '"' ;
}
if ( is_resource ( $value )) {
return 'resource' ;
}
if ( null === $value ) {
return 'null' ;
}
if ( false === $value ) {
return 'false' ;
}
if ( true === $value ) {
return 'true' ;
}
return ( string ) $value ;
}
/**
* Returns a string representation of a list of values .
*
* Each of the values is converted to a string using
* { @ link formatValue ()} . The values are then concatenated with commas .
*
* @ param array $values A list of values
* @ param int $format A bitwise combination of the format
* constants in this class
*
* @ return string The string representation of the value list
*
* @ see formatValue ()
*/
protected function formatValues ( array $values , $format = 0 )
{
foreach ( $values as $key => $value ) {
$values [ $key ] = $this -> formatValue ( $value , $format );
}
return implode ( ', ' , $values );
}
}