バックエンドのスタンダード:Laravel入門
■第3話:コントローラとフォームハンドリング
(最終更新日:2024.06.01)
(絵が小さい場合はスマホを横に)
「コントローラーとフォームを活用しよう」
第3回では、Laravelにおけるコントローラとフォームハンドリングについて学ぶ。
コントローラはアプリケーションのロジックを管理し、ユーザーからのリクエストを処理して適切なレスポンスを返す。
また、フォームリクエストを使用してバリデーションを簡単に実装する方法や、リクエストデータの取得、
レスポンスの作成とカスタマイズについても詳しく解説する。
これにより、より効率的でメンテナンスしやすいコードを書くための基礎を築く。
1.コントローラーの役割と作成
コントローラーはMVC(Model-View-Controller)アーキテクチャの一部であり、 アプリケーションのロジックを管理する。以下はコントローラーの主要な役割だ。
- リクエストの処理:ユーザーからのリクエストを受け取り、適切なレスポンスを返す
- ビジネスロジックの実行:必要なビジネスロジックを実行する。データベースからデータを取得したり、計算を行う
- ビューへのデータの渡し:ビューにデータを渡し、ユーザーに表示する内容を生成する
- リダイレクト:フォームの送信後や特定の条件が満たされた場合に、ユーザーを別のページにリダイレクトする
Laravelでは、コントローラーを簡単に作成できる。以下は、基本的なコントローラーの作成手順になる。
1)コントローラーの生成:LaravelのArtisan CLIを使用して、コントローラーを生成する。ターミナルで以下のコマンドを実行する。
これにより、app/Http/Controllers/SampleController.php というファイルが生成される。
コントローラを生成するコマンド
2)コントローラーの定義:生成された SampleController.php ファイルを開き、メソッドを追加する。 例えば、フォームの表示と送信を処理するためのメソッドを定義する。
コントローラにメソッドを定義する
3)ルーティングの設定:コントローラーのメソッドに対応するルートを設定する。 routes/web.php ファイルを開き、以下のルートを追加する。 前回解説したルーティングの書き方とは異なるが、このようにワンライナーで直接的に記述することもできる。 上の方はGETリクエストでフォームの表示を担当するshowFormメソッドに対応し、 下の方はPOSTリクエストでフォームの送信処理を担当するhandleFormメソッドに対応する。
コントローラにメソッドを定義する
4)ビューの作成:フォームを表示するためのビューを作成する。 resources/views/form.blade.php ファイルを作成し、以下の内容を記述する。 ここでは、ユーザー作成のフォーム送信を管理し、バリデーションエラーが発生した場合にはエラーメッセージを表示し、 フォーム送信が成功した場合は別のページにリダイレクトするように設計されている。 @error、@enderrorで囲まれた部分が、エラー時の表示にあたる。
コントローラにメソッドを定義する
これらの一連の手順により、Laravelで基本的なフォームハンドリングを行うコントローラーを作成し、使用することができる。
2.フォームリクエスト
Laravelのフォームリクエストは、フォーム入力のバリデーションロジックをコントローラーから切り離し、
専用のリクエストクラスにまとめるための仕組みだ。
これにより、コントローラーのコードがよりシンプルで読みやすくなり、バリデーションロジックの再利用性が向上する。
フォームリクエストを作成するには、以下のコマンドを実行する。
例えば、新しいユーザーを作成するためのフォームリクエストを作成する場合は以下のように実行する。
このコマンドにより、app/Http/Requests/StoreUserRequest.php というファイルが生成される。
フォームリクエストの作成
そして、生成されたStoreUserRequest.phpファイルを開き、バリデーションロジックを定義する。 これにより、入力文字数制限やエラー時のメッセージを決めることができる。
バリデーションロジックの定義
次に、フォームリクエストをコントローラーで使用する。コントローラーでの使用例を示す。 ここでは、先ほどのリクエスト情報を受け取り、ユーザーを作成するようにモデル(データベース)に命令を送る。 成功した際は、成功したメッセージをリダイレクトする。
コントローラによるモデルへの命令
このように、フォームリクエスト(バリデーション)とコントローラを分けることで、
コントローラのロジックがシンプルになり、コードが見やすくなる。
そして、命令を分けることにより、再利用性も向上する。
また、フォーム送信時のバリデーションエラーメッセージをビューに表示する方法を示す。
例えば、ユーザー作成フォームのビュー、resources/views/users/create.blade.phpを以下のように作成する。
bodyタグやheaderはここでは省略している。
フォームビューの作成
この一連の手順により、Laravelで効率的にフォームリクエストを処理し、 バリデーションロジックを管理する方法が理解できたと思う。 重要なのは、フォーム、バリデーション処理、データ処理してモデルへ送信と言うように、 責任を分離し、コードの可読性と再利用性を上げていることである。
3.バリデーションの実装
バリデーションは、ユーザーからの入力を検証し、データが正しい形式であることを確認するプロセスだ。
Laravelではバリデーションを簡単に実装できる豊富な機能が提供されている。
リクエストデータのバリデーションを行うために主に3つの方法がある。順に説明していこう。
3.1 コントローラー内でのバリデーション
コントローラー内でバリデーションを行うには、validateメソッドを使用してリクエストデータを認証する。
下記の赤枠の部分でバリデートを行い(nameは文字列255字以内など)、それを$validate変数でModel(ユーザー作成)に値を渡している。
コントローラで定義する方法は、バリデーションルールがシンプルで使いまわしが効きやすい小規模開発で好まれやすい。
ページや写真のリクエスト
3.2 フォームリクエストクラスを使用したバリデーション
フォームリクエストクラスを使用すると、バリデーションロジックを専用のクラスに分離できる。
こちらの場合は、2のバリデーションロジックの定義で示したコードになる。カスタムメッセージを定義したり、複雑な条件のバリデーションを実装できる。
フォームごとに変えられるので、中から大規模開発で好んで使われやすい。
3.3 バリデータクラスを直接使用したバリデーション
バリデータクラスを直接使用して、カスタムなバリデーションを行う方法になる。
この方法は非常に特殊なバリデーションロジックが必要な場合などに用途が限られ、使われるケースが少ないため、ここでは説明を割愛する。
最もカスタマイズ可能な方法で、特殊なケースが必要な場合に使うということだけ覚えておこう。
4.コントローラとフォームハンドリング
リクエストとレスポンスは、Webアプリケーションにおいてクライアントとサーバー間のデータ交換の基本だ。
Laravelでは、リクエストとレスポンスの管理が非常に簡単かつ柔軟に行えるようになっている。
このセクションでは、リクエストとレスポンスの基礎を詳しく解説する。
4.1 リクエストの取り扱い
Laravelでは、HTTPリクエストを Illuminate\Http\Request クラスを使用して処理する。
リクエストオブジェクトは、コントローラーメソッドの引数として受け取ることでアクセスできる。
下記では、全リクエストデータを取得したり、特定の項目のデータを取得したり、デフォルト値を決めたり、
写真データの取得、アップロードをするときの例を挙げた。
ページや写真のリクエスト
4.2 レスポンスの作成
これに対して、基本的なレスポンスは下記のようになる。
リダイレクトしたり、JSONを返したり、textベースのカスタムレスポンスを返したりできる。
リダイレクト、JSON、カスタムと様々なレスポンス
他にも、前項でも説明したように、viewにデータを渡してレスポンスを返すこともできる。
viewにデータを渡してレスポンス
APIエンドポイントやAJAXリクエストに対しては、JSON形式でレスポンスを返す。
APIエンドポイントとAJAXにはJSONを返す
4.3 リクエストとレスポンスのカスタマイズ
ミドルウェアを使用して、リクエストとレスポンスのカスタマイズやフィルタリングを行うことができる。
下記では、18歳未満の場合は、自動的にhomeにリダイレクトさせるミドルウェアである。
ミドルウェアはapp/Http/Kernel.phpに下記のように記述することで、設定できる。 これにより、ミドルウェアを適切に登録および適用し、アプリケーションのリクエスト処理のカスタマイズを行うことができる。
5.まとめ
第3回では、Laravelのコントローラとフォームハンドリングの基礎について学んだ。 コントローラの役割やフォームリクエストを用いたバリデーションの実装方法を理解し、 リクエストとレスポンスの取り扱いについても詳しく説明した。 これにより、ユーザーからの入力を適切に処理し、正確なレスポンスを返すアプリケーションを構築するための知識が身についた。 まずは、この辺りを確実におさえよう。
▼参考図書、サイト
「改定2版 速習Laravel」 山田祥寛 WINGSプロジェクト
「1週間で基礎から学ぶLaravel入門」 Minatomi