Open3

【Drupal】ちょっとしたことのメモ

WoodstockWoodstock

フォームバリデーション

  • ユーザーによって送信されたフォームの値は、$form_stateオブジェクトの$form_state->getValue('field_id')に含まれている。
  • フォームバリデーションメソッドは、フィールドに目的の値が含まれていることを検証する。
    • 無効な値である場合には、エラーを発生させるために必要な任意のPHP処理を使用できる。
  • フォームが送信されると、Drupalはフォームのすべてのバリデーションハンドラーを実行する。
    • エラーがある場合:
      • フォームのHTMLが再構築される。
      • エラーメッセージが表示される。
      • エラーのあるフィールドが強調表示される。
      • これにより、ユーザーはエラーを修正してフォームを再送信できる。
    • エラーがない場合:
      • フォームの送信ハンドラーが実行される。
/module/example/src/Form/ExampleForm.php
<?php

namespace Drupal\example\Form;

use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;

/**
 * Implements an example form.
 */
class ExampleForm extends FormBase {

  /**
   * {@inheritdoc}
   */
  public function validateForm(array &$form, FormStateInterface $form_state) {
    if (strlen($form_state->getValue('message')) < 5) {
      $form_state->setErrorByName('message', 'メッセージが短すぎます。');
    }
  }

}
WoodstockWoodstock

エンティティバリデーションとどちらを使用するべきか?

  • バリデーションが複雑な場合、エンティティバリデーションを使うとファイル(クラス)を分割できるため分かりやすくなる。
  • バリデーションが単純な場合には、フォームバリデーションを使う。

https://zenn.dev/woodstock/scraps/35030ca7f0f446