Drupal Form Api: Install, Source and Security | FunnelSlayer

Drupal Form Api

Published by edutrul in drupal-ai

No known issues47 installs

What this skill does

Drupal Form API — building forms with FormBase/ConfigFormBase, form elements, validate/submit handlers, DI, and generating forms with Drush including routes.

Add Drupal Form Api to your agent

Review the source and files first. When you are ready, copy the prompt instruction or use the CLI command supported by your environment.

Install with a prompt

Paste this into a compatible coding agent:

add this skill "drupal-form-api" from https://github.com/edutrul/drupal-ai

Install with the CLI

Run this command in a controlled environment after reviewing the repository:

npx skills add https://github.com/edutrul/drupal-ai --skill drupal-form-api

Skill instructions

Drupal Form API

Simple Form (FormBase)

// src/Form/MyForm.php
namespace Drupal\my_module\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;

final class MyForm extends FormBase {

  public function __construct(
    private readonly EntityTypeManagerInterface $entityTypeManager,
  ) {}

  public static function create(ContainerInterface $container): static {
    return new static(
      $container->get('entity_type.manager'),
    );
  }

  public function getFormId(): string {
    return 'my_module_my_form';
  }

  public function buildForm(array $form, FormStateInterface $form_state): array {
    $form['name'] = [
      '#type' => 'textfield',
      '#title' => $this->t('Name'),
      '#required' => TRUE,
    ];
    $form['submit'] = [
      '#type' => 'submit',
      '#value' => $this->t('Submit'),
    ];
    return $form;
  }

  public function submitForm(array &$form, FormStateInterface $form_state): void {
    $name = $form_state->getValue('name');
    $this->messenger()->addStatus($this->t('Hello @name!', ['@name' => $name]));
  }

}

Config Form (ConfigFormBase)

final class MySettingsForm extends ConfigFormBase {

  protected function getEditableConfigNames(): array {
    return ['my_module.settings'];
  }

  public function getFormId(): string {
    return 'my_module_settings';
  }

  public function buildForm(array $form, FormStateInterface $form_state): array {
    $config = $this->config('my_module.settings');
    $form['enabled'] = [
      '#type' => 'checkbox',
      '#title' => $this->t('Enable feature'),
      '#default_value' => $config->get('enabled'),
    ];
    return parent::buildForm($form, $form_state);
  }

  public function submitForm(array &$form, FormStateInterface $form_state): void {
    $this->config('my_module.settings')
      ->set('enabled', $form_state->getValue('enabled'))
      ->save();
    parent::submitForm($form, $form_state);
  }

}

Common Form Elements

TypeDescription
textfieldSingle line text
textareaMulti-line text
selectDropdown
checkboxesMultiple checkboxes
radiosRadio buttons
checkboxSingle checkbox
numberNumeric input
emailEmail input
managed_fileManaged file upload
entity_autocompleteEntity reference autocomplete
dateDate picker
detailsCollapsible group
containerNon-visual wrapper
hiddenHidden field
submitSubmit button

Files included

  • README.md
  • SKILL.md

More skills