function FormBuilderTest::testTriggeringElement
Tests the detection of the triggering element.
File
-
core/
tests/ Drupal/ Tests/ Core/ Form/ FormBuilderTest.php, line 1008
Class
- FormBuilderTest
- @coversDefaultClass \Drupal\Core\Form\FormBuilder[[api-linebreak]] @group Form
Namespace
Drupal\Tests\Core\FormCode
public function testTriggeringElement() : void {
$form_arg = 'Drupal\\Tests\\Core\\Form\\TestForm';
// No triggering element.
$form_state = new FormState();
$this->formBuilder
->buildForm($form_arg, $form_state);
$this->assertNull($form_state->getTriggeringElement());
// When no op is provided, default to the first button element.
$form_state = new FormState();
$form_state->setMethod('GET');
$form_state->setUserInput([
'form_id' => 'test_form',
]);
$this->formBuilder
->buildForm($form_arg, $form_state);
$triggeringElement = $form_state->getTriggeringElement();
$this->assertIsArray($triggeringElement);
$this->assertSame('op', $triggeringElement['#name']);
$this->assertSame('Submit', $triggeringElement['#value']);
// A single triggering element.
$form_state = new FormState();
$form_state->setMethod('GET');
$form_state->setUserInput([
'form_id' => 'test_form',
'op' => 'Submit',
]);
$this->formBuilder
->buildForm($form_arg, $form_state);
$triggeringElement = $form_state->getTriggeringElement();
$this->assertIsArray($triggeringElement);
$this->assertSame('op', $triggeringElement['#name']);
// A different triggering element.
$form_state = new FormState();
$form_state->setMethod('GET');
$form_state->setUserInput([
'form_id' => 'test_form',
'other_action' => 'Other action',
]);
$this->formBuilder
->buildForm($form_arg, $form_state);
$triggeringElement = $form_state->getTriggeringElement();
$this->assertIsArray($triggeringElement);
$this->assertSame('other_action', $triggeringElement['#name']);
// Two triggering elements.
$form_state = new FormState();
$form_state->setMethod('GET');
$form_state->setUserInput([
'form_id' => 'test_form',
'op' => 'Submit',
'other_action' => 'Other action',
]);
$this->formBuilder
->buildForm($form_arg, $form_state);
// Verify that only the first triggering element is respected.
$triggeringElement = $form_state->getTriggeringElement();
$this->assertIsArray($triggeringElement);
$this->assertSame('op', $triggeringElement['#name']);
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.