カテゴリ: Symfony 更新日: 2026/02/02

SymfonyのAPI開発でFormRequest風バリデーションを実装する方法を完全解説

SymfonyでFormRequest風のAPIバリデーションを実装する方法
SymfonyでFormRequest風のAPIバリデーションを実装する方法

先生と生徒の会話形式で理解しよう

生徒

「SymfonyでAPIを作るとき、入力チェックはどうやってやるんですか?」

先生

「Symfonyでは、バリデーション機能を使って、安全に入力内容をチェックできます。」

生徒

「LaravelのFormRequestみたいな書き方はできますか?」

先生

「考え方はとても近いですよ。順番に見ていきましょう。」

1. SymfonyのAPI開発とバリデーションとは?

1. SymfonyのAPI開発とバリデーションとは?
1. SymfonyのAPI開発とバリデーションとは?

Symfony(シンフォニー)は、PHPでWebアプリケーションやAPI開発を行うためのフレームワークです。APIとは、アプリ同士が情報をやり取りするための仕組みで、スマートフォンアプリやJavaScriptと組み合わせてよく使われます。

バリデーションとは、入力されたデータが正しいかを確認する仕組みです。例えば、メールアドレスの形が正しいか、名前が空欄ではないか、数字が入るべきところに文字が入っていないか、などをチェックします。これは、家に入る前に身分証を確認する門番のような役割です。

2. FormRequest風とはどういう意味?

2. FormRequest風とはどういう意味?
2. FormRequest風とはどういう意味?

FormRequestとは、Laravelという別のPHPフレームワークにある仕組みで、入力チェック専用のクラスを作る考え方です。Symfonyには同じ名前の機能はありませんが、「入力チェックだけをまとめたクラスを作る」という考え方は再現できます。

SymfonyのAPIバリデーションでは、Validatorコンポーネントを使い、DTO(データを入れる箱のようなクラス)にルールを書いていきます。これにより、コントローラーがスッキリし、初心者でも処理の流れが追いやすくなります。

3. APIで使うリクエストデータを受け取る基本

3. APIで使うリクエストデータを受け取る基本
3. APIで使うリクエストデータを受け取る基本

まずは、APIで送られてくるデータを受け取る方法を見てみましょう。SymfonyではRequestクラスを使います。Requestとは、「相手から届いた手紙一式」のようなものです。


use Symfony\Component\HttpFoundation\Request;

public function create(Request $request)
{
    $name = $request->request->get('name');
}

この例では、nameという値を取り出しています。requestという箱の中から、必要な情報を取り出すイメージです。

4. バリデーション用のクラスを作る

4. バリデーション用のクラスを作る
4. バリデーション用のクラスを作る

次に、FormRequest風にするため、入力チェック専用のクラスを作ります。これをDTOと呼びます。DTOとは、データをまとめて運ぶための入れ物です。


use Symfony\Component\Validator\Constraints as Assert;

class UserRequest
{
    #[Assert\NotBlank]
    #[Assert\Length(min: 3)]
    public string $name;
}

NotBlankは「空っぽは禁止」、Lengthは「文字数の制限」という意味です。難しい英語が出てきましたが、どれも「ルール札」だと考えると理解しやすいです。

5. Validatorを使ってチェックを実行する

5. Validatorを使ってチェックを実行する
5. Validatorを使ってチェックを実行する

次は、作ったルールを使って実際にチェックします。Validatorは、先生がテストの答えを丸付けするような役割です。


use Symfony\Component\Validator\Validator\ValidatorInterface;

public function create(Request $request, ValidatorInterface $validator)
{
    $userRequest = new UserRequest();
    $userRequest->name = $request->request->get('name');

    $errors = $validator->validate($userRequest);
}

validateを実行すると、ルール違反があればエラーが集められます。何もなければ合格です。

6. エラーをAPIレスポンスとして返す

6. エラーをAPIレスポンスとして返す
6. エラーをAPIレスポンスとして返す

APIでは、画面ではなくJSONという形式で結果を返します。JSONは、整理されたメモ帳のような形式です。


if (count($errors) > 0) {
    return new JsonResponse([
        'errors' => (string) $errors
    ], 400);
}

400は「リクエストが間違っている」という意味の番号です。API開発では、この番号もとても大切です。

7. SymfonyでFormRequest風にするメリット

7. SymfonyでFormRequest風にするメリット
7. SymfonyでFormRequest風にするメリット

SymfonyでAPIバリデーションをFormRequest風に書くことで、コードが読みやすくなります。入力チェックのルールが一か所にまとまり、修正もしやすくなります。

これは、文房具を引き出しごとに整理するのと同じです。必要なときに、必要な場所を見るだけで済むようになります。

8. 初心者がつまずきやすいポイント

8. 初心者がつまずきやすいポイント
8. 初心者がつまずきやすいポイント

初心者がよく迷うのは、「どこに何を書くのか」です。SymfonyのAPI開発では、コントローラー、DTO、バリデーションという役割分担を意識することが大切です。

パソコン操作が初めての人でも、「これは入力チェック専用の箱」と考えれば、少しずつ理解できます。

カテゴリの一覧へ
新着記事
New1
Laravel
LaravelでAPIのレスポンスをテストする方法を完全解説!assertJsonで初心者も安心
New2
CodeIgniter
CodeIgniterでRESTful API開発!初心者でもわかる全体構成ガイド
New3
Symfony
Symfonyのコントローラとは?作成・構造・役割を初心者向けにやさしく解説!
New4
Symfony
Symfonyでバリデーションメッセージを多言語対応する方法!初心者でもわかる国際化の基本
人気記事
No.1
Java&Spring記事人気No1
Laravel
Laravelのシングルアクションコントローラとは?使い方と利点
No.2
Java&Spring記事人気No2
Laravel
Laravelで動的パラメータをルートに渡す方法!初心者にもやさしいルートパラメータの使い方入門
No.3
Java&Spring記事人気No3
Laravel
Laravelでキャッシュを使う方法(ファイル・Redis・Memcached)
No.4
Java&Spring記事人気No4
Symfony
Symfonyの依存性注入(DI)とは?コンストラクタでの注入方法を初心者向けに徹底解説
No.5
Java&Spring記事人気No5
Laravel
LaravelのBlade構文まとめ!@if @foreach など基本ディレクティブ解説
No.6
Java&Spring記事人気No6
Laravel
Laravelのマイグレーション履歴を確認する方法を徹底解説!migrate:statusの使い方
No.7
Java&Spring記事人気No7
Laravel
Laravelで名前付きルートを設定する方法!初心者でもわかるroute()関数の使い方
No.8
Java&Spring記事人気No8
Laravel
Laravelでコントローラを作成する方法(artisanコマンド)