function ConfigFormBase::formatMultipleViolationsMessage

Same name in other branches
  1. 10 core/lib/Drupal/Core/Form/ConfigFormBase.php \Drupal\Core\Form\ConfigFormBase::formatMultipleViolationsMessage()

Formats multiple violation messages associated with a single form element.

Validation constraints only know the internal data structure (the configuration schema structure), but this need not be a disadvantage: rather than informing the user some values are wrong, it is possible guide them directly to the Nth entry in the sequence.

To further improve the user experience, it is possible to override method in subclasses to use specific knowledge about the structure of the form and the nature of the data being validated, to instead generate more precise and/or shortened violation messages.

Parameters

string $form_element_name: The form element for which to format multiple violation messages.

\Symfony\Component\Validator\ConstraintViolationListInterface $violations: The list of constraint violations that apply to this form element.

Return value

\Drupal\Component\Render\MarkupInterface|\Stringable The rendered HTML.

1 call to ConfigFormBase::formatMultipleViolationsMessage()
ConfigFormBase::validateForm in core/lib/Drupal/Core/Form/ConfigFormBase.php
Form validation handler.
1 method overrides ConfigFormBase::formatMultipleViolationsMessage()
UpdateSettingsForm::formatMultipleViolationsMessage in core/modules/update/src/UpdateSettingsForm.php
Formats multiple violation messages associated with a single form element.

File

core/lib/Drupal/Core/Form/ConfigFormBase.php, line 283

Class

ConfigFormBase
Base class for implementing system configuration forms.

Namespace

Drupal\Core\Form

Code

protected function formatMultipleViolationsMessage(string $form_element_name, array $violations) : MarkupInterface|\Stringable {
    $transformed_message_parts = [];
    foreach ($violations as $index => $violation) {
        // Note that `@validation_error_message` (should) already contain a
        // trailing period, hence it is intentionally absent here.
        $transformed_message_parts[] = $this->t('Entry @human_index: @validation_error_message', [
            // Humans start counting from 1, not 0.
'@human_index' => $index + 1,
            // Translators may not necessarily know what "violation constraint
            // messages" are, but they definitely know "validation errors".
'@validation_error_message' => $violation->getMessage(),
        ]);
    }
    // We use \Drupal\Core\Render\Markup::create() here as it is safe,
    // rather than use t() because all input has been escaped by t().
    return Markup::create(implode("\n", $transformed_message_parts));
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.