Mercurial > hg > isophonics-drupal-site
comparison vendor/symfony/validator/Validator/TraceableValidator.php @ 14:1fec387a4317
Update Drupal core to 8.5.2 via Composer
author | Chris Cannam |
---|---|
date | Mon, 23 Apr 2018 09:46:53 +0100 |
parents | |
children | 129ea1e6d783 |
comparison
equal
deleted
inserted
replaced
13:5fb285c0d0e3 | 14:1fec387a4317 |
---|---|
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\Validator; | |
13 | |
14 use Symfony\Component\Validator\Context\ExecutionContextInterface; | |
15 | |
16 /** | |
17 * Collects some data about validator calls. | |
18 * | |
19 * @author Maxime Steinhausser <maxime.steinhausser@gmail.com> | |
20 */ | |
21 class TraceableValidator implements ValidatorInterface | |
22 { | |
23 private $validator; | |
24 private $collectedData = array(); | |
25 | |
26 public function __construct(ValidatorInterface $validator) | |
27 { | |
28 $this->validator = $validator; | |
29 } | |
30 | |
31 /** | |
32 * @return array | |
33 */ | |
34 public function getCollectedData() | |
35 { | |
36 return $this->collectedData; | |
37 } | |
38 | |
39 public function reset() | |
40 { | |
41 $this->collectedData = array(); | |
42 } | |
43 | |
44 /** | |
45 * {@inheritdoc} | |
46 */ | |
47 public function getMetadataFor($value) | |
48 { | |
49 return $this->validator->getMetadataFor($value); | |
50 } | |
51 | |
52 /** | |
53 * {@inheritdoc} | |
54 */ | |
55 public function hasMetadataFor($value) | |
56 { | |
57 return $this->validator->hasMetadataFor($value); | |
58 } | |
59 | |
60 /** | |
61 * {@inheritdoc} | |
62 */ | |
63 public function validate($value, $constraints = null, $groups = null) | |
64 { | |
65 $violations = $this->validator->validate($value, $constraints, $groups); | |
66 | |
67 $trace = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS, 7); | |
68 | |
69 $file = $trace[0]['file']; | |
70 $line = $trace[0]['line']; | |
71 | |
72 for ($i = 1; $i < 7; ++$i) { | |
73 if (isset($trace[$i]['class'], $trace[$i]['function']) | |
74 && 'validate' === $trace[$i]['function'] | |
75 && is_a($trace[$i]['class'], ValidatorInterface::class, true) | |
76 ) { | |
77 $file = $trace[$i]['file']; | |
78 $line = $trace[$i]['line']; | |
79 | |
80 while (++$i < 7) { | |
81 if (isset($trace[$i]['function'], $trace[$i]['file']) && empty($trace[$i]['class']) && 0 !== strpos($trace[$i]['function'], 'call_user_func')) { | |
82 $file = $trace[$i]['file']; | |
83 $line = $trace[$i]['line']; | |
84 | |
85 break; | |
86 } | |
87 } | |
88 break; | |
89 } | |
90 } | |
91 | |
92 $name = str_replace('\\', '/', $file); | |
93 $name = substr($name, strrpos($name, '/') + 1); | |
94 | |
95 $this->collectedData[] = array( | |
96 'caller' => compact('name', 'file', 'line'), | |
97 'context' => compact('value', 'constraints', 'groups'), | |
98 'violations' => iterator_to_array($violations), | |
99 ); | |
100 | |
101 return $violations; | |
102 } | |
103 | |
104 /** | |
105 * {@inheritdoc} | |
106 */ | |
107 public function validateProperty($object, $propertyName, $groups = null) | |
108 { | |
109 return $this->validator->validateProperty($object, $propertyName, $groups); | |
110 } | |
111 | |
112 /** | |
113 * {@inheritdoc} | |
114 */ | |
115 public function validatePropertyValue($objectOrClass, $propertyName, $value, $groups = null) | |
116 { | |
117 return $this->validator->validatePropertyValue($objectOrClass, $propertyName, $value, $groups); | |
118 } | |
119 | |
120 /** | |
121 * {@inheritdoc} | |
122 */ | |
123 public function startContext() | |
124 { | |
125 return $this->validator->startContext(); | |
126 } | |
127 | |
128 /** | |
129 * {@inheritdoc} | |
130 */ | |
131 public function inContext(ExecutionContextInterface $context) | |
132 { | |
133 return $this->validator->inContext($context); | |
134 } | |
135 } |