コントローラーとアクション
artisanでコントローラーを作成し、アクションメソッドでリクエストを処理します
「コントローラーとアクション」はCoddyKit上の無料PHP Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはPHP Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 PHP Academyコースには全4レッスンが含まれています。
コントローラーとは
コントローラーは、関連するリクエスト処理ロジックをまとめるものです。ルートファイルにクロージャを記述する代わりに、コントローラーのメソッド(アクション)に処理を委譲します。
コントローラーの生成
Artisan を使用してコントローラーのひな形を生成します。
$ php artisan make:controller UserController
$ php artisan make:controller PostController --resource基本的なコントローラー
コントローラーは Controller を継承し、各ルートアクションに対応する public メソッドを持ちます。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\User;
class UserController extends Controller
{
public function index(): \Illuminate\View\View
{
$users = User::all();
return view("users.index", compact("users"));
}
}リクエストへのアクセス
アクションメソッドで Illuminate\Http\Request を型指定すると、Laravel が自動的に注入します。
<?php
public function store(Request $request): \Illuminate\Http\RedirectResponse
{
$name = $request->input("name");
$email = $request->input("email");
User::create(["name" => $name, "email" => $email]);
return redirect()->route("users.index");
}フォームのバリデーション
$request->validate() を使用して入力を検証します。検証に失敗すると、Laravel はエラー情報とともに自動的に元のページへリダイレクトします。
<?php
public function store(Request $request): \Illuminate\Http\RedirectResponse
{
$validated = $request->validate([
"name" => "required|string|max:255",
"email" => "required|email|unique:users",
]);
User::create($validated);
return redirect()->route("users.index");
}リソースコントローラーのメソッド
リソースコントローラーには、慣例的な 7 つのメソッドがあります。index、create、store、show、edit、update、destroy です。
単一アクションコントローラー
呼び出し可能なコントローラーには単一の __invoke() メソッドがあり、1 つの処理だけを行うアクションに適しています。
<?php
class SendWelcomeEmail extends Controller
{
public function __invoke(User $user): void
{
Mail::to($user)->send(new WelcomeMail($user));
}
}
// Route:
Route::post("/users/{user}/welcome", SendWelcomeEmail::class);コントローラーのミドルウェア
コンストラクターで middleware() メソッドを使用すると、特定のアクションにミドルウェアを適用できます。
<?php
public function __construct()
{
$this->middleware("auth")->except(["index", "show"]);
}依存性の注入
アクションメソッドのパラメーターでサービスを型指定すると、Laravel がサービスコンテナから解決します。
<?php
public function store(Request $request, Mailer $mailer): JsonResponse
{
// $mailer is auto-injected
}レスポンスの返却
コントローラーは、ビュー、リダイレクト、JSON レスポンス、ファイルのダウンロードを返せます。
<?php
return view("users.show", compact("user"));
return redirect()->back()->with("status", "Saved!");
return response()->json($user);
return response()->download(storage_path("report.pdf"));コントローラーの名前空間
デフォルトでは、すべてのコントローラーが App\Http\Controllers に配置されます。サブディレクトリを作成すると、サブ名前空間になります。例:App\Http\Controllers\Admin\UserController。
コントローラーを薄く保つ
コントローラーはビジネスロジックをサービスクラスまたはアクションに委譲する必要があります。コントローラーの役割は、入力を検証し、サービスを呼び出し、レスポンスを返すことだけにするのが理想です。
まとめ
Artisan でコントローラーを生成します。Request とサービスを型指定すると、自動的に注入されます。入力の検証には validate() を使用します。コントローラーは薄く保ち、処理をサービスに委譲します。
確認問題
リソースコントローラーを生成する Artisan コマンドは何ですか?
よくある質問
「コントローラーとアクション」レッスンは無料ですか?
はい。「コントローラーとアクション」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、PHP Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 PHP Academyコースには全4レッスンが含まれています。
「コントローラーとアクション」で何を学びますか?
artisanでコントローラーを作成し、アクションメソッドでリクエストを処理します ブラウザで直接実行するハンズオンコードでPHP Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
PHP Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのPHP Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「コントローラーとアクション」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このPHP Academyレッスンでコードを書いて実行できますか?
はい。すべてのPHP Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- Laravelのプロジェクト構成
- Laravelでルートを定義する
- コントローラーとアクション
- Bladeテンプレートとビュー