SymfonyのAPI開発でFormRequest風バリデーションを実装する方法を完全解説
生徒
「SymfonyでAPIを作るとき、入力チェックはどうやってやるんですか?」
先生
「Symfonyでは、バリデーション機能を使って、安全に入力内容をチェックできます。」
生徒
「LaravelのFormRequestみたいな書き方はできますか?」
先生
「考え方はとても近いですよ。順番に見ていきましょう。」
1. SymfonyのAPI開発とバリデーションとは?
Symfony(シンフォニー)は、PHPでWebアプリケーションやAPI開発を行うためのフレームワークです。APIとは、アプリ同士が情報をやり取りするための仕組みで、スマートフォンアプリやJavaScriptと組み合わせてよく使われます。
バリデーションとは、入力されたデータが正しいかを確認する仕組みです。例えば、メールアドレスの形が正しいか、名前が空欄ではないか、数字が入るべきところに文字が入っていないか、などをチェックします。これは、家に入る前に身分証を確認する門番のような役割です。
2. FormRequest風とはどういう意味?
FormRequestとは、Laravelという別のPHPフレームワークにある仕組みで、入力チェック専用のクラスを作る考え方です。Symfonyには同じ名前の機能はありませんが、「入力チェックだけをまとめたクラスを作る」という考え方は再現できます。
SymfonyのAPIバリデーションでは、Validatorコンポーネントを使い、DTO(データを入れる箱のようなクラス)にルールを書いていきます。これにより、コントローラーがスッキリし、初心者でも処理の流れが追いやすくなります。
3. APIで使うリクエストデータを受け取る基本
まずは、APIで送られてくるデータを受け取る方法を見てみましょう。SymfonyではRequestクラスを使います。Requestとは、「相手から届いた手紙一式」のようなものです。
use Symfony\Component\HttpFoundation\Request;
public function create(Request $request)
{
$name = $request->request->get('name');
}
この例では、nameという値を取り出しています。requestという箱の中から、必要な情報を取り出すイメージです。
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を使ってチェックを実行する
次は、作ったルールを使って実際にチェックします。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レスポンスとして返す
APIでは、画面ではなくJSONという形式で結果を返します。JSONは、整理されたメモ帳のような形式です。
if (count($errors) > 0) {
return new JsonResponse([
'errors' => (string) $errors
], 400);
}
400は「リクエストが間違っている」という意味の番号です。API開発では、この番号もとても大切です。
7. SymfonyでFormRequest風にするメリット
SymfonyでAPIバリデーションをFormRequest風に書くことで、コードが読みやすくなります。入力チェックのルールが一か所にまとまり、修正もしやすくなります。
これは、文房具を引き出しごとに整理するのと同じです。必要なときに、必要な場所を見るだけで済むようになります。
8. 初心者がつまずきやすいポイント
初心者がよく迷うのは、「どこに何を書くのか」です。SymfonyのAPI開発では、コントローラー、DTO、バリデーションという役割分担を意識することが大切です。
パソコン操作が初めての人でも、「これは入力チェック専用の箱」と考えれば、少しずつ理解できます。