123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- <?php
- namespace Symfony\Component\Validator\Mapping;
- use Symfony\Component\Validator\Constraint;
- use Symfony\Component\Validator\Exception\ConstraintDefinitionException;
- use Symfony\Component\Validator\ValidationVisitorInterface;
- abstract class MemberMetadata extends ElementMetadata implements PropertyMetadataInterface
- {
-
- public $class;
-
- public $name;
-
- public $property;
-
- private $reflMember = array();
-
- public function __construct($class, $name, $property)
- {
- $this->class = $class;
- $this->name = $name;
- $this->property = $property;
- }
-
- public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath, $propagatedGroup = null)
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.5 and will be removed in 3.0.', E_USER_DEPRECATED);
- $visitor->visit($this, $value, $group, $propertyPath);
- if ($this->isCascaded()) {
- $visitor->validate($value, $propagatedGroup ?: $group, $propertyPath, $this->isCollectionCascaded(), $this->isCollectionCascadedDeeply());
- }
- }
-
- public function addConstraint(Constraint $constraint)
- {
- if (!\in_array(Constraint::PROPERTY_CONSTRAINT, (array) $constraint->getTargets())) {
- throw new ConstraintDefinitionException(sprintf('The constraint %s cannot be put on properties or getters', \get_class($constraint)));
- }
- parent::addConstraint($constraint);
- return $this;
- }
-
- public function __sleep()
- {
- return array_merge(parent::__sleep(), array(
- 'class',
- 'name',
- 'property',
- ));
- }
-
- public function getName()
- {
- return $this->name;
- }
-
- public function getClassName()
- {
- return $this->class;
- }
-
- public function getPropertyName()
- {
- return $this->property;
- }
-
- public function isPublic($objectOrClassName)
- {
- return $this->getReflectionMember($objectOrClassName)->isPublic();
- }
-
- public function isProtected($objectOrClassName)
- {
- return $this->getReflectionMember($objectOrClassName)->isProtected();
- }
-
- public function isPrivate($objectOrClassName)
- {
- return $this->getReflectionMember($objectOrClassName)->isPrivate();
- }
-
- public function isCascaded()
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.5 and will be removed in 3.0. Use the getCascadingStrategy() method instead.', E_USER_DEPRECATED);
- return (bool) ($this->cascadingStrategy & CascadingStrategy::CASCADE);
- }
-
- public function isCollectionCascaded()
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.5 and will be removed in 3.0. Use the getTraversalStrategy() method instead.', E_USER_DEPRECATED);
- return (bool) ($this->traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE));
- }
-
- public function isCollectionCascadedDeeply()
- {
- @trigger_error('The '.__METHOD__.' method is deprecated since Symfony 2.5 and will be removed in 3.0. Use the getTraversalStrategy() method instead.', E_USER_DEPRECATED);
- return !($this->traversalStrategy & TraversalStrategy::STOP_RECURSION);
- }
-
- public function getReflectionMember($objectOrClassName)
- {
- $className = \is_string($objectOrClassName) ? $objectOrClassName : \get_class($objectOrClassName);
- if (!isset($this->reflMember[$className])) {
- $this->reflMember[$className] = $this->newReflectionMember($objectOrClassName);
- }
- return $this->reflMember[$className];
- }
-
- abstract protected function newReflectionMember($objectOrClassName);
- }
|