3 namespace Drupal\ajax_forms_test\Plugin\Block;
5 use Drupal\Core\Block\BlockBase;
6 use Drupal\Core\Form\FormBuilderInterface;
7 use Drupal\Core\Form\FormInterface;
8 use Drupal\Core\Form\FormStateInterface;
9 use Drupal\Core\Plugin\ContainerFactoryPluginInterface;
10 use Symfony\Component\DependencyInjection\ContainerInterface;
13 * Provides an AJAX form block.
16 * id = "ajax_forms_test_block",
17 * admin_label = @Translation("AJAX test form"),
18 * category = @Translation("Forms")
21 class AjaxFormBlock extends BlockBase implements FormInterface, ContainerFactoryPluginInterface {
26 * @var \Drupal\Core\Form\FormBuilderInterface
28 protected $formBuilder;
31 * Constructs a new AjaxFormBlock.
33 * @param array $configuration
34 * A configuration array containing information about the plugin instance.
35 * @param string $plugin_id
36 * The plugin ID for the plugin instance.
37 * @param mixed $plugin_definition
38 * The plugin implementation definition.
39 * @param \Drupal\Core\Form\FormBuilderInterface $form_builder
42 public function __construct(array $configuration, $plugin_id, $plugin_definition, FormBuilderInterface $form_builder) {
43 parent::__construct($configuration, $plugin_id, $plugin_definition);
44 $this->formBuilder = $form_builder;
50 public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
55 $container->get('form_builder')
62 public function build() {
63 return $this->formBuilder->getForm($this);
69 public function getFormId() {
70 return 'ajax_forms_test_block';
76 public function buildForm(array $form, FormStateInterface $form_state) {
79 '#title' => $this->t('Test 1'),
82 'option1' => $this->t('Option 1'),
83 'option2' => $this->t('Option 2'),
86 'callback' => '::updateOptions',
87 'wrapper' => 'edit-test1-wrapper',
89 '#prefix' => '<div id="edit-test1-wrapper">',
90 '#suffix' => '</div>',
95 $form['actions']['submit'] = [
97 '#value' => $this->t('Submit'),
103 * Updates the options of a select list.
106 * An associative array containing the structure of the form.
107 * @param \Drupal\Core\Form\FormStateInterface $form_state
108 * The current state of the form.
111 * The updated form element.
113 public function updateOptions(array $form, FormStateInterface $form_state) {
114 $form['test1']['#options']['option1'] = $this->t('Option 1!!!');
115 $form['test1']['#options'] += [
116 'option3' => $this->t('Option 3'),
117 'option4' => $this->t('Option 4'),
119 return $form['test1'];
125 public function validateForm(array &$form, FormStateInterface $form_state) {
131 public function submitForm(array &$form, FormStateInterface $form_state) {
132 drupal_set_message('Submission successful.');