function AjaxAddRemoveElements::removeCallback

Same name in other branches
  1. 4.0.x modules/form_api_example/src/Form/AjaxAddRemoveElements.php \Drupal\form_api_example\Form\AjaxAddRemoveElements::removeCallback()

Submit handler for the "remove" button.

Removes the corresponding line.

File

modules/form_api_example/src/Form/AjaxAddRemoveElements.php, line 143

Class

AjaxAddRemoveElements
Example ajax add remove buttons.

Namespace

Drupal\form_api_example\Form

Code

public function removeCallback(array &$form, FormStateInterface $form_state) {
    
    /*
     * We use the name of the remove button to find
     * the element we want to remove
     * Line 72: '#name' => $i,.
     */
    $trigger = $form_state->getTriggeringElement();
    $indexToRemove = $trigger['#name'];
    // Remove the fieldset from $form (the easy way)
    unset($form['names_fieldset'][$indexToRemove]);
    // Remove the fieldset from $form_state (the hard way)
    // First fetch the fieldset, then edit it, then set it again
    // Form API does not allow us to directly edit the field.
    $namesFieldset = $form_state->getValue('names_fieldset');
    unset($namesFieldset[$indexToRemove]);
    // $form_state->unsetValue('names_fieldset');
    $form_state->setValue('names_fieldset', $namesFieldset);
    // Keep track of removed fields so we can add new fields at the bottom
    // Without this they would be added where a value was removed.
    $removed_fields = $form_state->get('removed_fields');
    $removed_fields[] = $indexToRemove;
    $form_state->set('removed_fields', $removed_fields);
    // Rebuild form_state.
    $form_state->setRebuild();
}