You are here

public function DbtngExampleUpdateForm::buildForm in Examples for Developers 3.x

Same name and namespace in other branches
  1. 8 dbtng_example/src/Form/DbtngExampleUpdateForm.php \Drupal\dbtng_example\Form\DbtngExampleUpdateForm::buildForm()

Sample UI to update a record.

Overrides FormInterface::buildForm

File

modules/dbtng_example/src/Form/DbtngExampleUpdateForm.php, line 51

Class

DbtngExampleUpdateForm
Sample UI to update a record.

Namespace

Drupal\dbtng_example\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {

  // Wrap the form in a div.
  $form = [
    '#prefix' => '<div id="updateform">',
    '#suffix' => '</div>',
  ];

  // Add some explanatory text to the form.
  $form['message'] = [
    '#markup' => $this
      ->t('Demonstrates a database update operation.'),
  ];

  // Query for items to display.
  $entries = $this->repository
    ->load();

  // Tell the user if there is nothing to display.
  if (empty($entries)) {
    $form['no_values'] = [
      '#value' => $this
        ->t('No entries exist in the table dbtng_example table.'),
    ];
    return $form;
  }
  $keyed_entries = [];
  $options = [];
  foreach ($entries as $entry) {
    $options[$entry->pid] = $this
      ->t('@pid: @name @surname (@age)', [
      '@pid' => $entry->pid,
      '@name' => $entry->name,
      '@surname' => $entry->surname,
      '@age' => $entry->age,
    ]);
    $keyed_entries[$entry->pid] = $entry;
  }

  // Grab the pid.
  $pid = $form_state
    ->getValue('pid');

  // Use the pid to set the default entry for updating.
  $default_entry = !empty($pid) ? $keyed_entries[$pid] : $entries[0];

  // Save the entries into the $form_state. We do this so the AJAX callback
  // doesn't need to repeat the query.
  $form_state
    ->setValue('entries', $keyed_entries);
  $form['pid'] = [
    '#type' => 'select',
    '#options' => $options,
    '#title' => $this
      ->t('Choose entry to update'),
    '#default_value' => $default_entry->pid,
    '#ajax' => [
      'wrapper' => 'updateform',
      'callback' => [
        $this,
        'updateCallback',
      ],
    ],
  ];
  $form['name'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Updated first name'),
    '#size' => 15,
    '#default_value' => $default_entry->name,
  ];
  $form['surname'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Updated last name'),
    '#size' => 15,
    '#default_value' => $default_entry->surname,
  ];
  $form['age'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Updated age'),
    '#size' => 4,
    '#default_value' => $default_entry->age,
    '#description' => $this
      ->t('Values greater than 127 will cause an exception'),
  ];
  $form['submit'] = [
    '#type' => 'submit',
    '#value' => $this
      ->t('Update'),
  ];
  return $form;
}