mcpField
D
drupal-form-alter

drupal-form-alter

github.com/edutrul开发7349 次安装21 周前更新
代码仓库

关于 drupal-form-alter

面向 Drupal 开发者的表单修改参考,涵盖 Drupal 10.3+ 和 11 的面向对象 Hook 写法。示例说明如何调整字段属性,以及从表单状态获取表单对象和实体。

主要功能

  1. 01使用面向对象 Hook
  2. 02设置字段必填状态
  3. 03添加字段默认值
  4. 04隐藏表单字段
  5. 05获取表单对象和实体

适用场景

  1. 01修改字段校验要求
  2. 02为字段预填默认值
  3. 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