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\Mapping ;
use Symfony\Component\Validator\Exception\ValidatorException ;
/**
* Stores all metadata needed for validating a class property via its getter
* method .
*
* A property getter is any method that is equal to the property ' s name ,
* prefixed with either " get " or " is " . That method will be used to access the
* property ' s value .
*
* The getter will be invoked by reflection , so the access of private and
* protected getters is supported .
*
* This class supports serialization and cloning .
*
* @ author Bernhard Schussek < bschussek @ gmail . com >
*
* @ see PropertyMetadataInterface
*/
class GetterMetadata extends MemberMetadata
{
/**
* Constructor .
*
2017-04-13 15:53:35 +01:00
* @ param string $class The class the getter is defined on
* @ param string $property The property which the getter returns
* @ param string | null $method The method that is called to retrieve the value being validated ( null for auto - detection )
2015-08-17 17:00:26 -07:00
*
* @ throws ValidatorException
*/
2017-04-13 15:53:35 +01:00
public function __construct ( $class , $property , $method = null )
2015-08-17 17:00:26 -07:00
{
2017-04-13 15:53:35 +01:00
if ( null === $method ) {
$getMethod = 'get' . ucfirst ( $property );
$isMethod = 'is' . ucfirst ( $property );
$hasMethod = 'has' . ucfirst ( $property );
2015-08-17 17:00:26 -07:00
2017-04-13 15:53:35 +01:00
if ( method_exists ( $class , $getMethod )) {
$method = $getMethod ;
} elseif ( method_exists ( $class , $isMethod )) {
$method = $isMethod ;
} elseif ( method_exists ( $class , $hasMethod )) {
$method = $hasMethod ;
} else {
throw new ValidatorException ( sprintf ( 'Neither of these methods exist in class %s: %s, %s, %s' , $class , $getMethod , $isMethod , $hasMethod ));
}
} elseif ( ! method_exists ( $class , $method )) {
throw new ValidatorException ( sprintf ( 'The %s() method does not exist in class %s.' , $method , $class ));
2015-08-17 17:00:26 -07:00
}
parent :: __construct ( $class , $method , $property );
}
/**
* { @ inheritdoc }
*/
public function getPropertyValue ( $object )
{
return $this -> newReflectionMember ( $object ) -> invoke ( $object );
}
/**
* { @ inheritdoc }
*/
protected function newReflectionMember ( $objectOrClassName )
{
return new \ReflectionMethod ( $objectOrClassName , $this -> getName ());
}
}