2010-06-24 09:40:05 +01:00
< ? php
2010-10-02 11:42:31 +01:00
/*
2011-01-15 13:29:43 +00:00
* This file is part of the Symfony package .
2010-10-02 11:42:31 +01:00
*
2011-03-06 11:40:06 +00:00
* ( c ) Fabien Potencier < fabien @ symfony . com >
2010-10-02 11:42:31 +01:00
*
2011-01-15 13:29:43 +00:00
* For the full copyright and license information , please view the LICENSE
* file that was distributed with this source code .
2010-10-02 11:42:31 +01:00
*/
2011-01-15 13:29:43 +00:00
namespace Symfony\Component\Validator ;
2015-06-07 07:33:05 +01:00
@ trigger_error ( 'The ' . __NAMESPACE__ . '\ExecutionContext class is deprecated since version 2.5 and will be removed in 3.0. Use the Symfony\Component\Validator\Context\ExecutionContext class instead.' , E_USER_DEPRECATED );
2014-12-21 11:39:54 +00:00
2012-11-27 21:42:05 +00:00
use Symfony\Component\Translation\TranslatorInterface ;
2011-01-16 04:41:23 +00:00
/**
2012-11-22 14:58:46 +00:00
* Default implementation of { @ link ExecutionContextInterface } .
2011-01-16 04:41:23 +00:00
*
2012-01-31 20:35:48 +00:00
* This class is immutable by design .
*
2011-03-06 11:40:06 +00:00
* @ author Fabien Potencier < fabien @ symfony . com >
2012-01-31 17:42:14 +00:00
* @ author Bernhard Schussek < bschussek @ gmail . com >
2014-02-20 20:25:19 +00:00
*
2014-12-30 12:40:50 +00:00
* @ deprecated since version 2.5 , to be removed in 3.0 .
2014-02-20 20:25:19 +00:00
* Use { @ link Context\ExecutionContext } instead .
2011-01-16 04:41:23 +00:00
*/
2012-11-22 14:58:46 +00:00
class ExecutionContext implements ExecutionContextInterface
2010-06-24 09:40:05 +01:00
{
2012-11-22 14:58:46 +00:00
/**
* @ var GlobalExecutionContextInterface
*/
2012-01-31 20:35:48 +00:00
private $globalContext ;
2012-11-22 14:58:46 +00:00
2012-11-27 21:42:05 +00:00
/**
* @ var TranslatorInterface
*/
private $translator ;
/**
* @ var null | string
*/
private $translationDomain ;
2012-11-22 14:58:46 +00:00
/**
* @ var MetadataInterface
*/
private $metadata ;
/**
* @ var mixed
*/
2012-01-31 20:35:48 +00:00
private $value ;
2012-11-22 14:58:46 +00:00
/**
* @ var string
*/
2012-01-31 20:35:48 +00:00
private $group ;
2012-11-22 14:58:46 +00:00
/**
* @ var string
*/
private $propertyPath ;
/**
* Creates a new execution context .
*
2016-06-28 06:50:50 +01:00
* @ param GlobalExecutionContextInterface $globalContext The global context storing node - independent state
* @ param TranslatorInterface $translator The translator for translating violation messages
* @ param null | string $translationDomain The domain of the validation messages
* @ param MetadataInterface $metadata The metadata of the validated node
* @ param mixed $value The value of the validated node
* @ param string $group The current validation group
* @ param string $propertyPath The property path to the current node
2012-11-22 14:58:46 +00:00
*/
2012-11-27 21:42:05 +00:00
public function __construct ( GlobalExecutionContextInterface $globalContext , TranslatorInterface $translator , $translationDomain = null , MetadataInterface $metadata = null , $value = null , $group = null , $propertyPath = '' )
2010-06-24 10:24:08 +01:00
{
2012-11-22 14:58:46 +00:00
if ( null === $group ) {
$group = Constraint :: DEFAULT_GROUP ;
}
2012-01-31 20:35:48 +00:00
$this -> globalContext = $globalContext ;
2012-11-27 21:42:05 +00:00
$this -> translator = $translator ;
$this -> translationDomain = $translationDomain ;
2012-11-22 14:58:46 +00:00
$this -> metadata = $metadata ;
2012-01-31 20:35:48 +00:00
$this -> value = $value ;
$this -> propertyPath = $propertyPath ;
$this -> group = $group ;
2010-06-24 10:24:08 +01:00
}
2011-07-20 09:37:57 +01:00
/**
2012-11-22 14:58:46 +00:00
* { @ inheritdoc }
2011-07-20 09:37:57 +01:00
*/
2014-03-18 11:31:30 +00:00
public function addViolation ( $message , array $params = array (), $invalidValue = null , $plural = null , $code = null )
2010-06-24 10:24:08 +01:00
{
2014-03-18 11:31:30 +00:00
if ( null === $plural ) {
2013-02-06 20:54:30 +00:00
$translatedMessage = $this -> translator -> trans ( $message , $params , $this -> translationDomain );
} else {
try {
2014-03-18 11:31:30 +00:00
$translatedMessage = $this -> translator -> transChoice ( $message , $plural , $params , $this -> translationDomain );
2013-02-06 20:54:30 +00:00
} catch ( \InvalidArgumentException $e ) {
$translatedMessage = $this -> translator -> trans ( $message , $params , $this -> translationDomain );
}
}
2012-11-22 14:58:46 +00:00
$this -> globalContext -> getViolations () -> add ( new ConstraintViolation (
2013-02-06 20:54:30 +00:00
$translatedMessage ,
2010-09-24 15:34:58 +01:00
$message ,
$params ,
2012-01-31 20:35:48 +00:00
$this -> globalContext -> getRoot (),
2010-06-24 10:24:08 +01:00
$this -> propertyPath ,
2012-01-31 17:42:14 +00:00
// check using func_num_args() to allow passing null values
2012-05-03 19:43:38 +01:00
func_num_args () >= 3 ? $invalidValue : $this -> value ,
2014-03-18 11:31:30 +00:00
$plural ,
2012-05-21 16:13:00 +01:00
$code
2012-01-31 17:42:14 +00:00
));
}
2012-11-22 14:58:46 +00:00
/**
* { @ inheritdoc }
*/
2014-03-18 11:31:30 +00:00
public function addViolationAt ( $subPath , $message , array $parameters = array (), $invalidValue = null , $plural = null , $code = null )
2012-11-22 14:58:46 +00:00
{
$this -> globalContext -> getViolations () -> add ( new ConstraintViolation (
2014-03-18 11:31:30 +00:00
null === $plural
2014-02-17 17:34:00 +00:00
? $this -> translator -> trans ( $message , $parameters , $this -> translationDomain )
2014-03-18 11:31:30 +00:00
: $this -> translator -> transChoice ( $message , $plural , $parameters , $this -> translationDomain ),
2012-01-31 20:35:48 +00:00
$message ,
2014-02-17 17:34:00 +00:00
$parameters ,
2012-01-31 20:35:48 +00:00
$this -> globalContext -> getRoot (),
2012-02-02 09:13:41 +00:00
$this -> getPropertyPath ( $subPath ),
2012-01-31 20:35:48 +00:00
// check using func_num_args() to allow passing null values
2012-05-03 19:43:38 +01:00
func_num_args () >= 4 ? $invalidValue : $this -> value ,
2014-03-18 11:31:30 +00:00
$plural ,
2012-05-21 16:13:00 +01:00
$code
2012-01-31 20:35:48 +00:00
));
}
2011-01-16 04:41:23 +00:00
/**
2012-11-22 14:58:46 +00:00
* { @ inheritdoc }
2011-01-16 04:41:23 +00:00
*/
2010-06-24 10:24:08 +01:00
public function getViolations ()
{
2012-01-31 20:35:48 +00:00
return $this -> globalContext -> getViolations ();
2010-06-24 10:24:08 +01:00
}
2012-11-22 14:58:46 +00:00
/**
* { @ inheritdoc }
*/
2010-06-24 10:24:08 +01:00
public function getRoot ()
{
2012-01-31 20:35:48 +00:00
return $this -> globalContext -> getRoot ();
2010-06-24 10:24:08 +01:00
}
2012-11-22 14:58:46 +00:00
/**
* { @ inheritdoc }
*/
2012-12-03 18:34:26 +00:00
public function getPropertyPath ( $subPath = '' )
2010-06-24 10:24:08 +01:00
{
2012-12-03 18:34:26 +00:00
if ( '' != $subPath && '' !== $this -> propertyPath && '[' !== $subPath [ 0 ]) {
2013-04-02 10:39:57 +01:00
return $this -> propertyPath . '.' . $subPath ;
2012-02-01 12:53:45 +00:00
}
2013-04-02 10:39:57 +01:00
return $this -> propertyPath . $subPath ;
2012-02-01 12:53:45 +00:00
}
2012-11-22 14:58:46 +00:00
/**
* { @ inheritdoc }
*/
public function getClassName ()
2010-06-24 10:24:08 +01:00
{
2012-11-22 14:58:46 +00:00
if ( $this -> metadata instanceof ClassBasedInterface ) {
return $this -> metadata -> getClassName ();
}
2010-06-24 10:24:08 +01:00
}
2012-11-22 14:58:46 +00:00
/**
* { @ inheritdoc }
*/
public function getPropertyName ()
2010-06-24 10:24:08 +01:00
{
2012-11-22 14:58:46 +00:00
if ( $this -> metadata instanceof PropertyMetadataInterface ) {
return $this -> metadata -> getPropertyName ();
}
2010-06-24 10:24:08 +01:00
}
2012-11-22 14:58:46 +00:00
/**
* { @ inheritdoc }
*/
public function getValue ()
2012-01-31 17:42:14 +00:00
{
return $this -> value ;
}
2012-11-22 14:58:46 +00:00
/**
* { @ inheritdoc }
*/
2010-06-24 10:24:08 +01:00
public function getGroup ()
{
return $this -> group ;
}
2011-01-16 04:41:23 +00:00
/**
2012-11-22 14:58:46 +00:00
* { @ inheritdoc }
*/
public function getMetadata ()
{
return $this -> metadata ;
}
/**
* { @ inheritdoc }
*/
public function getMetadataFor ( $value )
{
return $this -> globalContext -> getMetadataFactory () -> getMetadataFor ( $value );
}
/**
* { @ inheritdoc }
*/
2012-12-02 10:14:14 +00:00
public function validate ( $value , $subPath = '' , $groups = null , $traverse = false , $deep = false )
2012-11-22 14:58:46 +00:00
{
$propertyPath = $this -> getPropertyPath ( $subPath );
foreach ( $this -> resolveGroups ( $groups ) as $group ) {
$this -> globalContext -> getVisitor () -> validate ( $value , $group , $propertyPath , $traverse , $deep );
}
}
/**
* { @ inheritdoc }
*/
2012-12-02 10:14:14 +00:00
public function validateValue ( $value , $constraints , $subPath = '' , $groups = null )
2012-11-22 14:58:46 +00:00
{
$constraints = is_array ( $constraints ) ? $constraints : array ( $constraints );
if ( null === $groups && '' === $subPath ) {
$context = clone $this ;
$context -> value = $value ;
$context -> executeConstraintValidators ( $value , $constraints );
return ;
}
$propertyPath = $this -> getPropertyPath ( $subPath );
foreach ( $this -> resolveGroups ( $groups ) as $group ) {
$context = clone $this ;
$context -> value = $value ;
$context -> group = $group ;
$context -> propertyPath = $propertyPath ;
$context -> executeConstraintValidators ( $value , $constraints );
}
}
2011-01-16 04:41:23 +00:00
/**
2012-11-22 14:58:46 +00:00
* { @ inheritdoc }
2011-01-16 04:41:23 +00:00
*/
2011-02-15 09:36:58 +00:00
public function getMetadataFactory ()
2010-06-24 10:24:08 +01:00
{
2012-01-31 20:35:48 +00:00
return $this -> globalContext -> getMetadataFactory ();
2010-06-24 10:24:08 +01:00
}
2012-11-22 14:58:46 +00:00
/**
* Executes the validators of the given constraints for the given value .
*
2016-06-28 06:50:50 +01:00
* @ param mixed $value The value to validate
* @ param Constraint [] $constraints The constraints to match against
2012-11-22 14:58:46 +00:00
*/
private function executeConstraintValidators ( $value , array $constraints )
{
foreach ( $constraints as $constraint ) {
$validator = $this -> globalContext -> getValidatorFactory () -> getInstance ( $constraint );
$validator -> initialize ( $this );
$validator -> validate ( $value , $constraint );
}
}
/**
* Returns an array of group names .
*
* @ param null | string | string [] $groups The groups to resolve . If a single string is
* passed , it is converted to an array . If null
* is passed , an array containing the current
* group of the context is returned .
*
2016-06-28 06:50:50 +01:00
* @ return array An array of validation groups
2012-11-22 14:58:46 +00:00
*/
private function resolveGroups ( $groups )
{
return $groups ? ( array ) $groups : ( array ) $this -> group ;
}
2011-06-08 11:16:48 +01:00
}