Open3
【Drupal】ちょっとしたことのメモ
フォームバリデーション
- ユーザーによって送信されたフォームの値は、
$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', 'メッセージが短すぎます。');
}
}
}
エンティティバリデーションとどちらを使用するべきか?
- バリデーションが複雑な場合、エンティティバリデーションを使うとファイル(クラス)を分割できるため分かりやすくなる。
- バリデーションが単純な場合には、フォームバリデーションを使う。
カスタムフォームのTwigテンプレート
以下3つの隠しフィールドがないとSubmitが働かない。
{{ form.form_build_id }}
{{ form.form_token }}
{{ form.form_id }}