【Laravel】コントローラーとは:Controllerの作成(コマンドや命名規則)
2024.01.13 /
本記事ではLaravelのコントローラー(Controller)における、概要や作成方法(コマンドや命名規則)などについて詳しく解説していきます。
LaravelのコントローラーはMVCモデルのC(Controller)に相当しており、モデルとビューの橋渡しを担っています。コントローラーは処理全体の制御を担当し、プログラムの本体といっても過言ではありません。
本記事を通して、Laravelのコントローラーについて理解を深めてください。
ここではLaravel 10を使用しています。
コントローラー(Controller)
コントローラーとは
Laravelにおけるコントローラーとはリクエストを受け付けてモデルとビューの仲介役を担当します。
コントローラーはルーティング(ルーター)からユーザーのリクエストを受け取ります。リクエストの内容によってモデルからデータを取得し、ビューにデータを渡す役割を担います。
コントローラーはMVCモデルのC(Controller)に相当し、アプリケーションのビジネスロジックを処理する重要な部分です。
MVCモデルとは
LaravelはMVCモデルと呼ばれる設計手法を採用しています。MVCモデルはモデル(Model)、ビュー(View)、コントローラー(Controller)の3つにアプリケーション開発で必要になる処理を分類します。これにより開発効率や保守性を高めています。
MVC | 説明 |
---|---|
モデル(Model) | データベースとの架け橋。データにアクセスしてデータの取得・保存・削除を担っています。またデータを扱いやすい形に変換する役割もあります |
ビュー(View) | フロントサイドを作成(ユーザー側に表示される画面を作る) |
コントローラー(Controller) | ビューとモデルの仲介役。モデルからデータを取得し、ビューに渡したり、ビューから受け取ったデータをモデルに渡して処理させる |
コントローラーのファイルは「app/Http/Controllers」の中に作成します。
コントローラーで実行される処理
コントローラーでは様々な処理が実行されます。以下に主な処理を記します。
- リクエストの処理
- データの取得、保存、更新、削除
- レスポンスの生成
リクエストの処理
コントローラーはルーティング(ルーター)を通してユーザーからのHTTPリクエストを受け取ります。リクエストの内容に応じて処理を実行します。
データの取得、保存、更新、削除
コントローラーはモデルとやり取りを行い、データベースへのデータの保存や更新、削除、取得などの操作を行います。
モデルとはMVCモデルのM(Model)にあたり、データベースとアプリケーションの架け橋となる重要な機能です。モデルはテーブルの内容をクラスとして定義し、このクラスを利用してデータベース操作を可能にします。
【Laravel】モデルとは:Modelの概要や作成方法について
レスポンスの生成
コントローラーで処理した結果からレスポンスをクライアント(ビュー)に返します。レスポンスにはJSONのレスポンスやリダイレクト、HTMLビューのレンダリングなどです。
コントローラーの命名規則
コントローラーの名前は命名規則に沿って作成します。通常はアッパーキャメルケースでコントローラー名を付けます。
アッパーキャメルケースとは最初の文字を大文字にして、かつ名前の区切り目部分も大文字にする方法です。例えば「BookController」のようにコントローラー名を付けるということです。
コントローラーの作成コマンド
コントローラーのファイルは以下構文に沿ってartisanコマンドを使うことで生成されます。
php artisan make:controller コントローラー名
コントローラー名は命名規則に則って付けてください。例えばPostControllerを作る場合は以下コマンドを実行します。
php artisan make:controller Test/PostController
上記コマンドのAppはフォルダ名です。上記コマンドを実行すると
「app/Http/Controllers/Test/PostController.php」が作成されます。
このように専用のフォルダにコントローラーを入れたい場合は、コントローラー名の前にフォルダ名を付けましょう。
作成されたコントローラーファイルを開くと次のような中身となっています。
<?php
namespace App\Http\Controllers\Test;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class PostController extends Controller
{
//
}
コントローラーにメソッドを定義する
コントローラーファイルのコントローラークラス内にリクエストを処理するメソッドを定義します。メソッドは一般的にCRUD操作(作成、読み取り、更新、削除)を表すメソッドを使います。
メソッド名 | 説明 |
---|---|
index | リストの表示など |
create | リソースを新規作成するフォームの表示 |
store | リソースの保存 |
show | 特定のリソースを表示 |
edit | 特定のリソースを編集するフォームを表示 |
update | 特定のリソースを更新 |
destroy | 特定のリソースを削除 |
例えばPostControllerクラスにindexメソッドとshowメソッドを作成すると次のようになります。
use App\Models\Post;
class PostController extends Controller
{
public function index(){
$posts = Post::all();
return view('index', compact('posts'));
}
public function show(string $id){
$post = Post::findOrFail($id);
return view('show', compact('post'));
}
}
上記のようにコントローラークラス内にメソッドを定義してコントローラーファイルを作成していきます。
ルーティングの設定
コントローラーを作成したらそれに対応するルーティングも設定する必要があります。ルーティングはクライアントからのリクエストをどのコントローラー(メソッド)に処理させるかを指定します。
例えば今回作成したメソッドであれば以下のようにルーティング(web.php)を指定します。
Route::get('post', [PostController::class, 'index']);
Route::get('post/{id}', [PostController::class, 'show']);
またCRUD操作の一連のメソッドをすべて含むリソースコントローラーを以下artisanコマンドで作成することができます。
php artisan make:controller UserController --resource
リソースコントローラーとは特定のリソースに対するCRUD操作(作成、読み込み、更新、削除)の一覧のメソッドを初めから備えているコントローラーです
作成されたコントローラーファイルを開くと、以下のように一連のメソッドが最初から記述されています。
<?php
namespace App\Http\Controllers\Test;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
class BookingController extends Controller
{
/**
* Display a listing of the resource.
*/
public function index()
{
//
}
/**
* Show the form for creating a new resource.
*/
public function create()
{
//
}
/**
* Store a newly created resource in storage.
*/
public function store(Request $request)
{
//
}
/**
* Display the specified resource.
*/
public function show(string $id)
{
//
}
/**
* Show the form for editing the specified resource.
*/
public function edit(string $id)
{
//
}
/**
* Update the specified resource in storage.
*/
public function update(Request $request, string $id)
{
//
}
/**
* Remove the specified resource from storage.
*/
public function destroy(string $id)
{
//
}
}
リソースコントローラーを利用することでメソッドの記述が簡素化されます。