public function filterByFields(array
$field_names) { $this->
groupViolationOffsets();
$new_violations =
[];
foreach (array_intersect_key($this->violationOffsetsByField,
array_flip($field_names)) as $field_name =>
$offsets) { foreach ($offsets as $offset) { $violation =
$this->
get($offset);
// Take care of composite field violations and re-map them to some
// covered field if necessary.
if ($violation->
getConstraint() instanceof CompositeConstraintBase
) { $covered_fields =
$violation->
getConstraint()->
coversFields();
// Keep the composite field if it covers some remaining field and put
// a violation on some other covered field instead.
if ($remaining_fields =
array_diff($covered_fields,
$field_names)) { $message_params =
['%field_name' =>
$field_name];
$violation =
new ConstraintViolation( $this->
t('The validation failed because the value conflicts with the value in %field_name, which you cannot access.',
$message_params),
'The validation failed because the value conflicts with the value in %field_name, which you cannot access.',
$message_params,
$violation->
getRoot(),
reset($remaining_fields),