mcpField
D
drupal-form-validation

drupal-form-validation

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

关于 drupal-form-validation

drupal-form-validation 是用于 Drupal 表单输入校验的开发技能,涵盖表单级和元素级验证、条件规则、值的读取,以及通过表单修改添加验证器。

主要功能

  1. 01在 validateForm() 中校验值
  2. 02向命名或嵌套元素附加错误
  3. 03添加元素级验证器
  4. 04应用条件校验规则
  5. 05通过 hook_form_alter 添加验证器

适用场景

  1. 01为选定的表单类型要求填写 URL
  2. 02校验字段格式或长度
  3. 03向嵌套元素附加错误
  4. 04为现有表单添加自定义检查

安装

复制下面的命令,在终端中运行。

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

安装后在 Claude Code 中输入/drupal-form-validation确认已加载。

附带文件README.md

详细介绍

Drupal 表单验证

validateForm() 方法

public function validateForm(array &$form, FormStateInterface $form_state): void {
  $name = $form_state->getValue('name');

  if (strlen($name) < 3) {
    $form_state->setErrorByName('name', $this->t('Name must be at least 3 characters.'));
  }

  if (!preg_match('/^[a-zA-Z\s]+$/', $name)) {
    $form_state->setErrorByName('name', $this->t('Name may only contain letters and spaces.'));
  }
}

setError 与 setErrorByName

// Target a specific form element by name
$form_state->setErrorByName('field_date', $this->t('Invalid date.'));

// Target a nested element
$form_state->setErrorByName('field_date][0][value', $this->t('Invalid date.'));

// Target a specific render element directly
$form_state->setError($form['field_date'], $this->t('Invalid date.'));

#element_validate

将验证器直接附加到元素:

$form['email'] = [
  '#type' => 'email',
  '#title' => $this->t('Email'),
  '#element_validate' => [
    [static::class, 'validateUniqueEmail'],
  ],
];

public static function validateUniqueEmail(array &$element, FormStateInterface $form_state, array &$form): void {
  $email = $element['#value'];
  // Check uniqueness...
  if ($emailExists) {
    $form_state->setError($element, t('This email is already registered.'));
  }
}

条件验证

public function validateForm(array &$form, FormStateInterface $form_state): void {
  $type = $form_state->getValue('type');

  if ($type === 'external') {
    $url = $form_state->getValue('url');
    if (empty($url)) {
      $form_state->setErrorByName('url', $this->t('URL is required for external type.'));
    }
    elseif (!UrlHelper::isValid($url, TRUE)) {
      $form_state->setErrorByName('url', $this->t('Please enter a valid URL.'));
    }
  }
}

在验证中访问值

// Get a single value
$value = $form_state->getValue('my_field');

// Get nested value
$value = $form_state->getValue(['field_date', 0, 'value']);

// Get all values
$values = $form_state->getValues();

// Check if field has errors
if ($form_state->getError($form['my_field'])) { ... }

通过 hook_form_alter 添加验证

#[Hook('form_node_article_form_alter')]
public function formNodeArticleFormAlter(array &$form, FormStateInterface $form_state): void {
  // Add before existing validators
  array_unshift($form['#validate'], [static::class, 'validateArticle']);

  // Add after existing validators
  $form['#validate'][] = [static::class, 'validateArticle'];
}

public static function validateArticle(array &$form, FormStateInterface $form_state): void {
  // Validation logic here.
}

评论

支持 Markdown