drupal-form-alter について
Drupal 開発者向けのフォーム変更リファレンスです。Drupal 10.3+ と 11 のオブジェクト指向 Hook の書き方に加え、フィールド属性やフォームオブジェクト、エンティティの取得例を示します。
主な機能
- 01オブジェクト指向 Hook の使用
- 02フィールドの必須化
- 03フィールドのデフォルト値設定
- 04フォームフィールドの非表示
- 05フォームオブジェクトとエンティティの取得
活用シーン
- 01フィールドの検証要件の変更
- 02フィールドへの初期値設定
- 03必要に応じた内部フィールドの非表示
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ edutrul/ drupal-ai --skill drupal-form-alterインストール後、Claude Code で/drupal-form-alterを入力して読み込まれたか確認します。
同梱ファイルREADME.md
README(原文)English
プロジェクトの README よりこの README の日本語訳はまだありません。以下は英語の原文です。日本語の紹介はページ上部をご覧ください。
Drupal Form Alter
OOP Hook (Drupal 10.3+ / 11)
// src/Hook/MyModuleHooks.php
namespace Drupal\my_module\Hook;
use Drupal\Core\Hook\Attribute\Hook;
use Drupal\Core\Form\FormStateInterface;
final class MyModuleHooks {
#[Hook('form_alter')]
public function formAlter(array &$form, FormStateInterface $form_state, string $form_id): void {
if ($form_id === 'node_article_form' || $form_id === 'node_article_edit_form') {
// Alter the article node form.
$form['title']['#description'] = t('Enter a descriptive title.');
}
}
// Target a specific form more efficiently
#[Hook('form_node_article_form_alter')]
public function formNodeArticleFormAlter(array &$form, FormStateInterface $form_state): void {
$form['#validate'][] = [MyModuleHooks::class, 'validateArticleForm'];
$form['actions']['submit']['#submit'][] = [MyModuleHooks::class, 'submitArticleForm'];
}
}
Common Alterations
// Make a field required
$form['field_subtitle']['widget'][0]['value']['#required'] = TRUE;
// Add a field default value
$form['field_subtitle']['widget'][0]['value']['#default_value'] = 'Default';
// Hide a field
$form['field_internal']['#access'] = FALSE;
// Add a CSS class
$form['#attributes']['class'][] = 'my-custom-form';
// Change submit button label
$form['actions']['submit']['#value'] = t('Save Article');
// Add a custom submit handler (runs AFTER default)
$form['actions']['submit']['#submit'][] = '::mySubmitHandler';
// Prepend a custom validate handler
array_unshift($form['#validate'], '::myValidateHandler');
Get Form Object
$form_object = $form_state->getFormObject();
if ($form_object instanceof NodeForm) {
$node = $form_object->getEntity();
}
コメント
Markdown 対応