comparison vendor/symfony/validator/Mapping/PropertyMetadata.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
comparison
equal deleted inserted replaced
-1:000000000000 0:4c8ae668cc8c
1 <?php
2
3 /*
4 * This file is part of the Symfony package.
5 *
6 * (c) Fabien Potencier <fabien@symfony.com>
7 *
8 * For the full copyright and license information, please view the LICENSE
9 * file that was distributed with this source code.
10 */
11
12 namespace Symfony\Component\Validator\Mapping;
13
14 use Symfony\Component\Validator\Exception\ValidatorException;
15
16 /**
17 * Stores all metadata needed for validating a class property.
18 *
19 * The value of the property is obtained by directly accessing the property.
20 * The property will be accessed by reflection, so the access of private and
21 * protected properties is supported.
22 *
23 * This class supports serialization and cloning.
24 *
25 * @author Bernhard Schussek <bschussek@gmail.com>
26 *
27 * @see PropertyMetadataInterface
28 */
29 class PropertyMetadata extends MemberMetadata
30 {
31 /**
32 * Constructor.
33 *
34 * @param string $class The class this property is defined on
35 * @param string $name The name of this property
36 *
37 * @throws ValidatorException
38 */
39 public function __construct($class, $name)
40 {
41 if (!property_exists($class, $name)) {
42 throw new ValidatorException(sprintf('Property "%s" does not exist in class "%s"', $name, $class));
43 }
44
45 parent::__construct($class, $name, $name);
46 }
47
48 /**
49 * {@inheritdoc}
50 */
51 public function getPropertyValue($object)
52 {
53 return $this->getReflectionMember($object)->getValue($object);
54 }
55
56 /**
57 * {@inheritdoc}
58 */
59 protected function newReflectionMember($objectOrClassName)
60 {
61 $originalClass = is_string($objectOrClassName) ? $objectOrClassName : get_class($objectOrClassName);
62
63 while (!property_exists($objectOrClassName, $this->getName())) {
64 $objectOrClassName = get_parent_class($objectOrClassName);
65
66 if (false === $objectOrClassName) {
67 throw new ValidatorException(sprintf('Property "%s" does not exist in class "%s".', $this->getName(), $originalClass));
68 }
69 }
70
71 $member = new \ReflectionProperty($objectOrClassName, $this->getName());
72 $member->setAccessible(true);
73
74 return $member;
75 }
76 }