/** * Form API validate for install_settings form. */ function install_settings_form_validate($form, &$form_state) { form_set_value($form['_database'], $form_state['values'], $form_state); $errors = install_database_errors($form_state['values'], $form_state['values']['settings_file']); foreach ($errors as $name => $message) { form_set_error($name, $message); } }
/** * Get any database errors and links them to a form element. * * @param array $database * An array of database settings. * @param string $settings_file * The settings file that contains the database settings. * * @return array * An array of form errors keyed by the element name and parents. */ protected function getDatabaseErrors(array $database, $settings_file) { $errors = install_database_errors($database, $settings_file); $form_errors = array_filter($errors, function ($value) { // Errors keyed by something other than an integer already are linked to // form elements. return is_int($value); }); // Find the generic errors. $errors = array_diff_key($errors, $form_errors); if (count($errors)) { $error_message = ['#type' => 'inline_template', '#template' => '{% trans %}Resolve all issues below to continue the installation. For help configuring your database server, see the <a href="https://www.drupal.org/getting-started/install">installation handbook</a>, or contact your hosting provider.{% endtrans%}{{ errors }}', '#context' => ['errors' => ['#theme' => 'item_list', '#items' => $errors]]]; // These are generic errors, so we do not have any specific key of the // database connection array to attach them to; therefore, we just put // them in the error array with standard numeric keys. $form_errors[$database['driver'] . '][0'] = $this->renderer->renderPlain($error_message); } return $form_errors; }
/** * {@inheritdoc} */ public function validateForm(array &$form, FormStateInterface $form_state) { $driver = $form_state->getValue('driver'); $database = $form_state->getValue($driver); $drivers = drupal_get_database_types(); $reflection = new \ReflectionClass($drivers[$driver]); $install_namespace = $reflection->getNamespaceName(); // Cut the trailing \Install from namespace. $database['namespace'] = substr($install_namespace, 0, strrpos($install_namespace, '\\')); $database['driver'] = $driver; $form_state->set('database', $database); $errors = install_database_errors($database, $form_state->getValue('settings_file')); foreach ($errors as $name => $message) { $form_state->setErrorByName($name, $message); } }
/** * {@inheritdoc} */ public function validateForm(array &$form, array &$form_state) { $driver = $form_state['values']['driver']; $database = $form_state['values'][$driver]; $drivers = drupal_get_database_types(); $reflection = new \ReflectionClass($drivers[$driver]); $install_namespace = $reflection->getNamespaceName(); // Cut the trailing \Install from namespace. $database['namespace'] = substr($install_namespace, 0, strrpos($install_namespace, '\\')); $database['driver'] = $driver; $form_state['storage']['database'] = $database; $errors = install_database_errors($database, $form_state['values']['settings_file']); foreach ($errors as $name => $message) { $this->setFormError($name, $form_state, $message); } }