You are here

abstract class MemberMetadata in Plug 7

Stores all metadata needed for validating a class property.

The method of accessing the property's value must be specified by subclasses by implementing the {@link newReflectionMember()} method.

This class supports serialization and cloning.

@author Bernhard Schussek <bschussek@gmail.com>

Hierarchy

Expanded class hierarchy of MemberMetadata

See also

PropertyMetadataInterface

1 file declares its use of MemberMetadata
MemberMetadataTest.php in lib/Symfony/validator/Symfony/Component/Validator/Tests/Mapping/MemberMetadataTest.php

File

lib/Symfony/validator/Symfony/Component/Validator/Mapping/MemberMetadata.php, line 30

Namespace

Symfony\Component\Validator\Mapping
View source
abstract class MemberMetadata extends ElementMetadata implements PropertyMetadataInterface {

  /**
   * @var string
   *
   * @internal This property is public in order to reduce the size of the
   *           class' serialized representation. Do not access it. Use
   *           {@link getClassName()} instead.
   */
  public $class;

  /**
   * @var string
   *
   * @internal This property is public in order to reduce the size of the
   *           class' serialized representation. Do not access it. Use
   *           {@link getName()} instead.
   */
  public $name;

  /**
   * @var string
   *
   * @internal This property is public in order to reduce the size of the
   *           class' serialized representation. Do not access it. Use
   *           {@link getPropertyName()} instead.
   */
  public $property;

  /**
   * @var \ReflectionMethod[]|\ReflectionProperty[]
   */
  private $reflMember = array();

  /**
   * Constructor.
   *
   * @param string $class    The name of the class this member is defined on
   * @param string $name     The name of the member
   * @param string $property The property the member belongs to
   */
  public function __construct($class, $name, $property) {
    $this->class = $class;
    $this->name = $name;
    $this->property = $property;
  }

  /**
   * {@inheritdoc}
   *
   * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
   */
  public function accept(ValidationVisitorInterface $visitor, $value, $group, $propertyPath, $propagatedGroup = null) {
    $visitor
      ->visit($this, $value, $group, $propertyPath);
    if ($this
      ->isCascaded()) {
      $visitor
        ->validate($value, $propagatedGroup ?: $group, $propertyPath, $this
        ->isCollectionCascaded(), $this
        ->isCollectionCascadedDeeply());
    }
  }

  /**
   * {@inheritdoc}
   */
  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;
  }

  /**
   * {@inheritdoc}
   */
  public function __sleep() {
    return array_merge(parent::__sleep(), array(
      'class',
      'name',
      'property',
    ));
  }

  /**
   * Returns the name of the member.
   *
   * @return string
   */
  public function getName() {
    return $this->name;
  }

  /**
   * {@inheritdoc}
   */
  public function getClassName() {
    return $this->class;
  }

  /**
   * {@inheritdoc}
   */
  public function getPropertyName() {
    return $this->property;
  }

  /**
   * Returns whether this member is public.
   *
   * @param object|string $objectOrClassName The object or the class name
   *
   * @return bool
   */
  public function isPublic($objectOrClassName) {
    return $this
      ->getReflectionMember($objectOrClassName)
      ->isPublic();
  }

  /**
   * Returns whether this member is protected.
   *
   * @param object|string $objectOrClassName The object or the class name
   *
   * @return bool
   */
  public function isProtected($objectOrClassName) {
    return $this
      ->getReflectionMember($objectOrClassName)
      ->isProtected();
  }

  /**
   * Returns whether this member is private.
   *
   * @param object|string $objectOrClassName The object or the class name
   *
   * @return bool
   */
  public function isPrivate($objectOrClassName) {
    return $this
      ->getReflectionMember($objectOrClassName)
      ->isPrivate();
  }

  /**
   * Returns whether objects stored in this member should be validated.
   *
   * @return bool
   *
   * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
   *             Use {@link getCascadingStrategy()} instead.
   */
  public function isCascaded() {
    return (bool) ($this->cascadingStrategy & CascadingStrategy::CASCADE);
  }

  /**
   * Returns whether arrays or traversable objects stored in this member
   * should be traversed and validated in each entry.
   *
   * @return bool
   *
   * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
   *             Use {@link getTraversalStrategy()} instead.
   */
  public function isCollectionCascaded() {
    return (bool) ($this->traversalStrategy & (TraversalStrategy::IMPLICIT | TraversalStrategy::TRAVERSE));
  }

  /**
   * Returns whether arrays or traversable objects stored in this member
   * should be traversed recursively for inner arrays/traversable objects.
   *
   * @return bool
   *
   * @deprecated Deprecated since version 2.5, to be removed in Symfony 3.0.
   *             Use {@link getTraversalStrategy()} instead.
   */
  public function isCollectionCascadedDeeply() {
    return !($this->traversalStrategy & TraversalStrategy::STOP_RECURSION);
  }

  /**
   * Returns the reflection instance for accessing the member's value.
   *
   * @param object|string $objectOrClassName The object or the class name
   *
   * @return \ReflectionMethod|\ReflectionProperty The reflection instance
   */
  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];
  }

  /**
   * Creates a new reflection instance for accessing the member's value.
   *
   * Must be implemented by subclasses.
   *
   * @param object|string $objectOrClassName The object or the class name
   *
   * @return \ReflectionMethod|\ReflectionProperty The reflection instance
   */
  protected abstract function newReflectionMember($objectOrClassName);

}

Members

Namesort descending Modifiers Type Description Overrides
GenericMetadata::$cascadingStrategy public property The strategy for cascading objects.
GenericMetadata::$constraints public property @internal This property is public in order to reduce the size of the class' serialized representation. Do not access it. Use {@link getConstraints()} and {@link findConstraints()} instead.
GenericMetadata::$constraintsByGroup public property @internal This property is public in order to reduce the size of the class' serialized representation. Do not access it. Use {@link findConstraints()} instead.
GenericMetadata::$traversalStrategy public property The strategy for traversing traversable objects. 1
GenericMetadata::addConstraints public function Adds an list of constraints.
GenericMetadata::findConstraints public function Aware of the global group (* group). Overrides MetadataInterface::findConstraints
GenericMetadata::getCascadingStrategy public function Returns the strategy for cascading objects. Overrides MetadataInterface::getCascadingStrategy 1
GenericMetadata::getConstraints public function Returns all constraints of this element. Overrides MetadataInterface::getConstraints
GenericMetadata::getTraversalStrategy public function Returns the strategy for traversing traversable objects. Overrides MetadataInterface::getTraversalStrategy
GenericMetadata::hasConstraints public function Returns whether this element has any constraints.
GenericMetadata::__clone public function Clones this object.
MemberMetadata::$class public property @internal This property is public in order to reduce the size of the class' serialized representation. Do not access it. Use {@link getClassName()} instead.
MemberMetadata::$name public property @internal This property is public in order to reduce the size of the class' serialized representation. Do not access it. Use {@link getName()} instead.
MemberMetadata::$property public property @internal This property is public in order to reduce the size of the class' serialized representation. Do not access it. Use {@link getPropertyName()} instead.
MemberMetadata::$reflMember private property
MemberMetadata::accept Deprecated public function Overrides GenericMetadata::accept
MemberMetadata::addConstraint public function Adds a constraint. Overrides GenericMetadata::addConstraint
MemberMetadata::getClassName public function Returns the name of the backing PHP class. Overrides ClassBasedInterface::getClassName
MemberMetadata::getName public function Returns the name of the member.
MemberMetadata::getPropertyName public function Returns the name of the property. Overrides PropertyMetadataInterface::getPropertyName
MemberMetadata::getReflectionMember public function Returns the reflection instance for accessing the member's value.
MemberMetadata::isCascaded Deprecated public function Returns whether objects stored in this member should be validated.
MemberMetadata::isCollectionCascaded Deprecated public function Returns whether arrays or traversable objects stored in this member should be traversed and validated in each entry.
MemberMetadata::isCollectionCascadedDeeply Deprecated public function Returns whether arrays or traversable objects stored in this member should be traversed recursively for inner arrays/traversable objects.
MemberMetadata::isPrivate public function Returns whether this member is private.
MemberMetadata::isProtected public function Returns whether this member is protected.
MemberMetadata::isPublic public function Returns whether this member is public.
MemberMetadata::newReflectionMember abstract protected function Creates a new reflection instance for accessing the member's value. 3
MemberMetadata::__construct public function Constructor. 2
MemberMetadata::__sleep public function Returns the names of the properties that should be serialized. Overrides GenericMetadata::__sleep
PropertyMetadataInterface::getPropertyValue public function Extracts the value of the property from the given container. 3