コントローラ — 処理を整理する
ルートに直接処理を書く代わりに、コントローラに処理をまとめて見通しよく整理する方法を学びます。
広告枠(記事上)— 本番では AdSense 広告が表示されます
前の単元では、ルートに処理を直接書きました。しかしアプリが大きくなると、routes/web.php が処理だらけになり読みにくくなります。そこで処理を コントローラ に分離します。
コントローラを作る
make:controller コマンドでコントローラを作成します。
php artisan make:controller UserController
app/Http/Controllers/UserController.php が作られます。中身は空のクラスです。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class UserController extends Controller
{
//
}
メソッドを定義する
コントローラに、処理を行う メソッド を追加します。
class UserController extends Controller
{
public function index()
{
return 'ユーザー一覧です';
}
public function show(string $id)
{
return "ユーザーID: {$id}";
}
}
ルートとコントローラを結びつける
routes/web.php で、ルートに「どのコントローラのどのメソッドを使うか」を指定します。
use App\Http\Controllers\UserController;
Route::get('/users', [UserController::class, 'index']);
Route::get('/users/{id}', [UserController::class, 'show']);
/users で index() が、/users/5 で show('5') が実行されます。ルートファイルがすっきりしました。
単一の処理だけのコントローラ
「1つの処理しかしない」コントローラは、__invoke メソッドを使うとより簡潔です。--invokable オプションで作成します。
php artisan make:controller WelcomeController --invokable
class WelcomeController extends Controller
{
public function __invoke()
{
return 'ようこそ';
}
}
ルート側はメソッド名の指定が不要になります。
Route::get('/welcome', WelcomeController::class);
まとめ
- 処理はルートに直接書かず、コントローラ にまとめると見通しがよい。
php artisan make:controller 名前でコントローラを作成する。- ルートは
[Controller::class, 'メソッド名']で結びつける。 - 1処理だけなら
--invokable(__invoke)が簡潔。 - 次の単元では、コントローラから ビュー(画面) を返します。
広告枠(記事下)— 本番では AdSense 広告が表示されます