public NegotiationUrlForm::validateForm(array &$form, FormStateInterface $form_state)
Form validation handler.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Overrides FormBase::validateForm
File
- core/modules/language/src/Form/NegotiationUrlForm.php, line 136
Class
- NegotiationUrlForm
- Configure the URL language negotiation method for this site.
Namespace
Drupal\language\Form
Code
public function validateForm(array &$form, FormStateInterface $form_state) { $languages = $this->languageManager->getLanguages(); // Count repeated values for uniqueness check. $count = array_count_values($form_state->getValue('prefix')); $default_langcode = $this->config('language.negotiation')->get('selected_langcode'); if ($default_langcode == LanguageInterface::LANGCODE_SITE_DEFAULT) { $default_langcode = $this->languageManager->getDefaultLanguage()->getId(); } foreach ($languages as $langcode => $language) { $value = $form_state->getValue(array('prefix', $langcode)); if ($value === '') { if (!($default_langcode == $langcode) && $form_state->getValue('language_negotiation_url_part') == LanguageNegotiationUrl::CONFIG_PATH_PREFIX) { // Throw a form error if the prefix is blank for a non-default language, // although it is required for selected negotiation type. $form_state->setErrorByName("prefix][$langcode", $this->t('The prefix may only be left blank for the <a href=":url">selected detection fallback language.</a>', [ ':url' => $this->getUrlGenerator()->generate('language.negotiation_selected'), ])); } } elseif (strpos($value, '/') !== FALSE) { // Throw a form error if the string contains a slash, // which would not work. $form_state->setErrorByName("prefix][$langcode", $this->t('The prefix may not contain a slash.')); } elseif (isset($count[$value]) && $count[$value] > 1) { // Throw a form error if there are two languages with the same // domain/prefix. $form_state->setErrorByName("prefix][$langcode", $this->t('The prefix for %language, %value, is not unique.', array('%language' => $language->getName(), '%value' => $value))); } } // Count repeated values for uniqueness check. $count = array_count_values($form_state->getValue('domain')); foreach ($languages as $langcode => $language) { $value = $form_state->getValue(array('domain', $langcode)); if ($value === '') { if ($form_state->getValue('language_negotiation_url_part') == LanguageNegotiationUrl::CONFIG_DOMAIN) { // Throw a form error if the domain is blank for a non-default language, // although it is required for selected negotiation type. $form_state->setErrorByName("domain][$langcode", $this->t('The domain may not be left blank for %language.', array('%language' => $language->getName()))); } } elseif (isset($count[$value]) && $count[$value] > 1) { // Throw a form error if there are two languages with the same // domain/domain. $form_state->setErrorByName("domain][$langcode", $this->t('The domain for %language, %value, is not unique.', array('%language' => $language->getName(), '%value' => $value))); } } // Domain names should not contain protocol and/or ports. foreach ($languages as $langcode => $language) { $value = $form_state->getValue(array('domain', $langcode)); if (!empty($value)) { // Ensure we have exactly one protocol when checking the hostname. $host = 'http://' . str_replace(array('http://', 'https://'), '', $value); if (parse_url($host, PHP_URL_HOST) != $value) { $form_state->setErrorByName("domain][$langcode", $this->t('The domain for %language may only contain the domain name, not a trailing slash, protocol and/or port.', ['%language' => $language->getName()])); } } } parent::validateForm($form, $form_state); }
Please login to continue.