概要
ルーティングは、HTTPリクエストを特定のコントローラやクロージャに結びつけます。
ルーティング設定を管理
【ファイル先】App\Providers\RouteServiceProvider
<?php
namespace App\Providers;
use Illuminate\Cache\RateLimiting\Limit;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\RateLimiter;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
/**
* The path to your application's "home" route.
*
* Typically, users are redirected here after authentication.
*
* @var string
*/
public const HOME = '/home';
/**
* Define your route model bindings, pattern filters, and other route configuration.
*/
public function boot(): void
{
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
}
}
リダイレクト先
public const HOME = '/home';
初期化した後の動作
public function boot(): void
APIリクエストに対するレート制限
RateLimiter::for('api', function (Request $request) {
return Limit::perMinute(60)->by($request->user()?->id ?: $request->ip());
});
ルート定義
$this->routes(function () {
Route::middleware('api')
->prefix('api')
->group(base_path('routes/api.php'));
Route::middleware('web')
->group(base_path('routes/web.php'));
});
route指定
ウェブアプリケーション向けのルート(URLと処理の対応関係)を定義するファイルです。
【ファイル先】routes/web.php
<?php
use Illuminate\Support\Facades\Route;
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider and all of them will
| be assigned to the "web" middleware group. Make something great!
|
*/
Route::get('/', function () {
return view('welcome');
});
ドメイン/とURLを入力するとwelcomeビュー(画面)を表示
※表示ファイル先 resources/views/welcome.blade.php
指定一覧
ビュー直接指定
ルートにアクセスすると、指定したビューが直接表示されます。
<?php
use Illuminate\Support\Facades\Route;
// aboutビューを表示(resources/views/about.blade.php)
Route::view('/about', 'about');
<?php
use Illuminate\Support\Facades\Route;
// aboutビューにデータを渡す
Route::view('/about', 'about', ['name' => 'tomoji']);
コントローラーメソッド呼び出し
ルートでコントローラーメソッドを呼び出す標準的な方法です。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\HomeController;
// HomeControllerのindexメソッド呼び出し
Route::get('/home', [HomeController::class, 'index']);
クロージャを使ったルート
コントローラを使わずに、ルートに直接処理を記述します。
※小さな処理や一時的なルートに便利
<?php
use Illuminate\Support\Facades\Route;
// クロージャ内でビューを返す
Route::get('/', function () {
return view('welcome');
});
クロージャとは、他の関数やメソッドの外で定義された変数にアクセスできる匿名関数のことです。
PHPでは、クロージャはfunction
キーワードを使って定義され、
通常の関数と同じように引数を取ることができます。
RESTfulリソースコントローラ
一般的なCRUD操作(Create, Read, Update, Delete)をまとめてルート定義します。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PostController;
// リソースコントローラを定義
Route::resource('posts', PostController::class);
名前付きルート
コントローラーメソッドやビューの呼び出しに名前を付けて、後で簡単に参照できるようにします。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ProfileController;
Route::get('/profile', [ProfileController::class, 'show'])->name('profile');
ルートパラメータ
ルートで動的パラメータを使用して、コントローラーメソッドに値を渡します。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
// URLの{id}がshowメソッドのパラメータに
Route::get('/user/{id}', [UserController::class, 'show']);
グループ化されたルート
共通のURLプレフィックスやミドルウェアを持つルートをグループ化します。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AdminController;
// プレフィックス /admin が付く
Route::prefix('admin')->group(function () {
Route::get('/dashboard', [AdminController::class, 'dashboard']);
Route::get('/users', [AdminController::class, 'users']);
});
ミドルウェアグループ
複数のミドルウェアを一度に適用するために、ルートにミドルウェアグループを指定できます。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\DashboardController;
// 'auth' と 'verified' ミドルウェアが適用されたルートグループ
Route::middleware(['auth', 'verified'])->group(function () {
// 認証されたユーザーのみがアクセス可能
Route::get('/dashboard', [DashboardController::class, 'index']);
});
任意パラメータ付きルート
URL内のパラメータをオプションにして、存在しない場合はデフォルト値を使用します。
<?php
use Illuminate\Support\Facades\Route;
// '/user/{name?}' にアクセスすると、$name パラメータが渡される
// パラメータが指定されない場合は 'Guest' がデフォルト値として使用される
Route::get('/user/{name?}', function ($name = 'Guest') {
return 'Hello, ' . $name;
});
ルートグループ内の名前付きルート
ルートグループに名前のプレフィックスを付けて、ルート名を一括管理します。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\AdminController;
// ルート名に 'admin.' プレフィックスを追加するグループ
Route::name('admin.')->group(function () {
// nameはadmin.dashboardになる
Route::get('/dashboard', [AdminController::class, 'dashboard'])->name('dashboard');
// nameはadmin.settingsになる
Route::get('/settings', [AdminController::class, 'settings'])->name('settings');
});
サブドメインルート
サブドメインに応じたルートを定義します。
<?php
use Illuminate\Support\Facades\Route;
// {account}.example.com というサブドメインに対応するルートグループ
Route::domain('{account}.example.com')->group(function () {
// サブドメインとユーザーIDに基づいて処理を行うルート
Route::get('user/{id}', function ($account, $id) {
return "Account: $account, User ID: $id";
});
});
HTTPメソッド複数指定ルート
複数のHTTPメソッドに対応するルートを定義します。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ContactController;
// GET または POST リクエストに対応するルート
Route::match(['get', 'post'], '/contact', [ContactController::class, 'handle']);
ルートパラメータのバリデーション
ルートパラメータにバリデーションを設定します。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\UserController;
// {id} パラメータが数字であることを強制するルート
Route::get('/user/{id}', [UserController::class, 'show'])
->where('id', '[0-9]+'); // ID は数字のみ許可
デフォルトルート
どのルートにも一致しない場合の処理を定義します。
<?php
use Illuminate\Support\Facades\Route;
// 定義されたルートに一致しないリクエストに対するフォールバックルート
Route::fallback(function () {
return response()->view('errors.404', [], 404); // 404エラーページを表示
});
シングルアクションコントローラ
コントローラの__invoke
メソッドを利用して単一アクションを処理します。
<?php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\ContactController;
// ContactController の __invoke メソッドを呼び出すルート
Route::get('/contact', ContactController::class);