今回はユーザー入力データにアクセスするための API、あるいはフォームデータモデルについて書きたいと思います。Schema-Woven Validation は異なるプラットフォームでも一貫したバリデーションロジックを提供する枠組みですからバリデーションの対象であるフォームデータの一貫性が基礎となりますが、各プラットフォームが標準装備するフォームデータモデルにはびっくりするぐらいの違いがあるのが現実です。 クライアント側のフォームデータモデルの代表格である JavaScript の FormData インターフェイスと、サーバー側でよく使われる PHP のスーパーグローバル変数の比較を見てみましょう。 たとえば次のようなユーザー入力があったとします。 FormData ではフィールド名と入力値のペアの配列として以下のように表現します。 PHP ($_POST) の場合は連想配列として扱われるので以下のようになります。 同じ名前のフィールドが2つあるケースを見てみましょう。 FormData では以下のようになります。 PHP の場合は連想配列の性質から以下のように最後のフィールド値がそれより前のものを上書きします。 さらに角括弧 ([]) つきのフィールド名を使ったケースでは両者の違いがより鮮明になります。 FormData は角括弧をフィールド名を構成する意味を持たないただの文字として扱うので以下のような構造になります。 一方 PHP では角括弧は配列リテラルの意味を持つため、データの構造は以下のようになります。 というわけで一般的な文字列のユーザー入力でもざっとこのような大きな違いが見られます。これにさらにアップロードファイルの扱いがどうなるか詳しく見ていくと、あまりの違いの大きさと複雑さに発狂せずにいることが難しく思えてきます。 このようなバラバラのフォームデータモデルの上に一貫性のあるバリデーションロジックを構築するのは無理があるので、SWV では FormDataTree というインターフェイスを挟んでそこでプラットフォーム間の差異を吸収しているのです。
今回はユーザー入力データにアクセスするための API、あるいはフォームデータモデルについて書きたいと思います。Schema-Woven Validation は異なるプラットフォームでも一貫したバリデーションロジックを提供する枠組みですからバリデーションの対象であるフォームデータの一貫性が基礎となりますが、各プラットフォームが標準装備するフォームデータモデルにはびっくりするぐらいの違いがあるのが現実です。
クライアント側のフォームデータモデルの代表格である JavaScript の FormData インターフェイスと、サーバー側でよく使われる PHP のスーパーグローバル変数の比較を見てみましょう。
たとえば次のようなユーザー入力があったとします。
FormData ではフィールド名と入力値のペアの配列として以下のように表現します。
PHP ($_POST) の場合は連想配列として扱われるので以下のようになります。
同じ名前のフィールドが2つあるケースを見てみましょう。
FormData では以下のようになります。
PHP の場合は連想配列の性質から以下のように最後のフィールド値がそれより前のものを上書きします。
さらに角括弧 ([]) つきのフィールド名を使ったケースでは両者の違いがより鮮明になります。
FormData は角括弧をフィールド名を構成する意味を持たないただの文字として扱うので以下のような構造になります。
一方 PHP では角括弧は配列リテラルの意味を持つため、データの構造は以下のようになります。
というわけで一般的な文字列のユーザー入力でもざっとこのような大きな違いが見られます。これにさらにアップロードファイルの扱いがどうなるか詳しく見ていくと、あまりの違いの大きさと複雑さに発狂せずにいることが難しく思えてきます。
このようなバラバラのフォームデータモデルの上に一貫性のあるバリデーションロジックを構築するのは無理があるので、SWV では FormDataTree というインターフェイスを挟んでそこでプラットフォーム間の差異を吸収しているのです。
| # | Наименование новости | Тональность | Информативность | Дата публикации |
|---|---|---|---|---|
| 1 | バリデーションロジックの考え方 | 0 | 9.81 | 17-05-2026 |
| 2 | HTML バリデーションの不整合 | 0 | 11.3 | 24-05-2026 |
| 3 | 文字列を数える | 0 | 10.41 | 07-06-2026 |
| 4 | トリマーたちの意見が合わない | 0 | 7.08 | 31-05-2026 |
| 5 | 融通が利かないことの美徳について | 0 | 12.73 | 09-08-2026 |
| 6 | Interactivity API в WordPress — полное руководство | 0 | 8.16 | 29-01-2026 |
| 7 | DTO, schema, model, entity: почему в коде всё называется User | 0 | 7 | 01-07-2026 |
| 8 | API Сайдбаров и Виджетов | 0 | 12.3 | 22-05-2026 |
| 9 | Внутренние запросы к WordPress REST API | 0 | 8.19 | 08-08-2026 |
| 10 | #! code: LocalGov Drupal: Rewriting Waste Collection Data Provider Classes To Alter Data | 0 | 5 | 19-07-2026 |