X-Git-Url: http://www.aleph1.co.uk/gitweb/?p=yaffs-website;a=blobdiff_plain;f=web%2Fcore%2Flib%2FDrupal%2FCore%2FField%2FFieldConfigBase.php;fp=web%2Fcore%2Flib%2FDrupal%2FCore%2FField%2FFieldConfigBase.php;h=e53e84b6c89ba1a2979a8dea65771604b04bb209;hp=76366bfe21c56ec332eb46fba5698b9762523680;hb=bfbba508964731508b9bd6d5835c2edc858db95b;hpb=cb9a80db11fc6b014e5b1e693a5a391c95eb5d9a diff --git a/web/core/lib/Drupal/Core/Field/FieldConfigBase.php b/web/core/lib/Drupal/Core/Field/FieldConfigBase.php index 76366bfe2..e53e84b6c 100644 --- a/web/core/lib/Drupal/Core/Field/FieldConfigBase.php +++ b/web/core/lib/Drupal/Core/Field/FieldConfigBase.php @@ -180,6 +180,14 @@ abstract class FieldConfigBase extends ConfigEntityBase implements FieldConfigIn */ protected $constraints = []; + /** + * Array of property constraint options keyed by property ID. The values are + * associative array of constraint options keyed by constraint plugin ID. + * + * @var array[] + */ + protected $propertyConstraints = []; + /** * {@inheritdoc} */ @@ -515,7 +523,20 @@ abstract class FieldConfigBase extends ConfigEntityBase implements FieldConfigIn if (!isset($this->itemDefinition)) { $this->itemDefinition = FieldItemDataDefinition::create($this) ->setSettings($this->getSettings()); + + // Add any custom property constraints, overwriting as required. + $item_constraints = $this->itemDefinition->getConstraint('ComplexData') ?: []; + foreach ($this->propertyConstraints as $name => $constraints) { + if (isset($item_constraints[$name])) { + $item_constraints[$name] = $constraints + $item_constraints[$name]; + } + else { + $item_constraints[$name] = $constraints; + } + $this->itemDefinition->addConstraint('ComplexData', $item_constraints); + } } + return $this->itemDefinition; } @@ -546,9 +567,12 @@ abstract class FieldConfigBase extends ConfigEntityBase implements FieldConfigIn * {@inheritdoc} */ public function setPropertyConstraints($name, array $constraints) { - $item_constraints = $this->getItemDefinition()->getConstraints(); - $item_constraints['ComplexData'][$name] = $constraints; - $this->getItemDefinition()->setConstraints($item_constraints); + $this->propertyConstraints[$name] = $constraints; + + // Reset the field item definition so the next time it is instantiated it + // will receive the new constraints. + $this->itemDefinition = NULL; + return $this; } @@ -556,15 +580,14 @@ abstract class FieldConfigBase extends ConfigEntityBase implements FieldConfigIn * {@inheritdoc} */ public function addPropertyConstraints($name, array $constraints) { - $item_constraints = $this->getItemDefinition()->getConstraint('ComplexData') ?: []; - if (isset($item_constraints[$name])) { - // Add the new property constraints, overwriting as required. - $item_constraints[$name] = $constraints + $item_constraints[$name]; - } - else { - $item_constraints[$name] = $constraints; + foreach ($constraints as $constraint_name => $options) { + $this->propertyConstraints[$name][$constraint_name] = $options; } - $this->getItemDefinition()->addConstraint('ComplexData', $item_constraints); + + // Reset the field item definition so the next time it is instantiated it + // will receive the new constraints. + $this->itemDefinition = NULL; + return $this; }