Pull merge.
[yaffs-website] / web / core / lib / Drupal / Core / Validation / Plugin / Validation / Constraint / ComplexDataConstraint.php
1 <?php
2
3 namespace Drupal\Core\Validation\Plugin\Validation\Constraint;
4
5 use Symfony\Component\Validator\Constraint;
6
7 /**
8  * Complex data constraint.
9  *
10  * Validates properties of complex data structures.
11  *
12  * @Constraint(
13  *   id = "ComplexData",
14  *   label = @Translation("Complex data", context = "Validation")
15  * )
16  */
17 class ComplexDataConstraint extends Constraint {
18
19   /**
20    * An array of constraints for contained properties, keyed by property name.
21    *
22    * @var array
23    */
24   public $properties;
25
26   /**
27    * {@inheritdoc}
28    */
29   public function __construct($options = NULL) {
30     // Allow skipping the 'properties' key in the options.
31     if (is_array($options) && !array_key_exists('properties', $options)) {
32       $options = ['properties' => $options];
33     }
34     parent::__construct($options);
35     $constraint_manager = \Drupal::service('validation.constraint');
36
37     // Instantiate constraint objects for array definitions.
38     foreach ($this->properties as &$constraints) {
39       foreach ($constraints as $id => $options) {
40         if (!is_object($options)) {
41           $constraints[$id] = $constraint_manager->create($id, $options);
42         }
43       }
44     }
45   }
46
47   /**
48    * {@inheritdoc}
49    */
50   public function getDefaultOption() {
51     return 'properties';
52   }
53
54   /**
55    * {@inheritdoc}
56    */
57   public function getRequiredOptions() {
58     return ['properties'];
59   }
60
61 }