function FormBuilder::submitForm

Same name and namespace in other branches
  1. 9 core/lib/Drupal/Core/Form/FormBuilder.php \Drupal\Core\Form\FormBuilder::submitForm()
  2. 8.9.x core/lib/Drupal/Core/Form/FormBuilder.php \Drupal\Core\Form\FormBuilder::submitForm()
  3. 11.x core/lib/Drupal/Core/Form/FormBuilder.php \Drupal\Core\Form\FormBuilder::submitForm()

Retrieves, populates, and processes a form.

This function allows you to supply values for form elements and submit a form for processing. Compare to self::getForm(), which also builds and processes a form, but does not allow you to supply values.

There is no return value, but you can check to see if there are errors by calling $form_state->getErrors().

For example:

// Set the administrator role to 'content_editor'.
$values['user_admin_role'] = 'content_editor';
$form_state = new FormState();
$form_state->setValues($values);
\Drupal::formBuilder()->submitForm(RoleSettingsForm::class, $form_state);

@todo Uncomment new method parameters before drupal:11.0.0.

Parameters

\Drupal\Core\Form\FormInterface|string $form_arg: The value must be one of the following:

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form. Most important is the $form_state->getValues() collection, a tree of data used to simulate the incoming \Drupal::request()->request information from a user's form submission. If a key is not filled in $form_state->getValues(), then the default value of the respective element is used. To submit an unchecked checkbox or other control that browsers submit by not having a \Drupal::request()->request entry, include the key, but set the value to NULL. phpcs:disable Drupal.Commenting

mixed ...$args: Any additional arguments are passed on to the functions called by self::submitForm(), including the unique form constructor function. For example, the node_edit form requires that a node object be passed in here when it is called. Arguments that need to be passed by reference should not be included here, but rather placed directly in the $form_state build info array so that the reference can be preserved. For example, a form builder function with the following signature:

function my_module_form($form, FormStateInterface &$form_state, &$object) {
}

would be called via self::submitForm() as follows:

$form_state->setValues($my_form_values);
$form_state->addBuildInfo('args', [
  &$object,
]);
\Drupal::formBuilder()->submitForm('my_module_form', $form_state);

phpcs:enable

Overrides FormBuilderInterface::submitForm

File

core/lib/Drupal/Core/Form/FormBuilder.php, line 476

Class

FormBuilder
Provides form building and processing.

Namespace

Drupal\Core\Form

Code

public function submitForm($form_arg, FormStateInterface &$form_state) {
  $build_info = $form_state->getBuildInfo();
  if (empty($build_info['args'])) {
    $args = func_get_args();
    // Remove $form and $form_state from the arguments.
    unset($args[0], $args[1]);
    $form_state->addBuildInfo('args', array_values($args));
  }
  // Populate FormState::$input with the submitted values before retrieving
  // the form, to be consistent with what self::buildForm() does for
  // non-programmatic submissions (form builder functions may expect it to be
  // there).
  $form_state->setUserInput($form_state->getValues());
  $form_state->setProgrammed();
  $form_id = $this->getFormId($form_arg, $form_state);
  $form = $this->retrieveForm($form_id, $form_state);
  // Programmed forms are always submitted.
  $form_state->setSubmitted();
  // Reset form validation.
  $form_state->setValidationEnforced();
  $form_state->clearErrors();
  $this->prepareForm($form_id, $form, $form_state);
  $this->processForm($form_id, $form, $form_state);
}

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