ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
| この記事の要点 |
|
基本ルートの書き方
// routes/web.php
use Illuminate\Support\Facades\Route;
// HTTP メソッド別
Route::get('/', fn () => view('welcome'));
Route::post('/login', [LoginController::class, 'store']);
Route::put('/users/{id}',[UserController::class, 'update']);
Route::patch('/users/{id}', [UserController::class, 'update']);
Route::delete('/users/{id}',[UserController::class, 'destroy']);
// 複数メソッド対応
Route::match(['get', 'post'], '/search', [SearchController::class, 'index']);
Route::any('/webhook', [WebhookController::class, 'handle']);
// ビューを直接返す
Route::view('/about', 'pages.about', ['title' => 'About']);
// リダイレクト
Route::redirect('/old', '/new', 301);
ルートパラメータ
// 必須パラメータ
Route::get('/users/{id}', function ($id) {
return "User $id";
});
// 任意パラメータ
Route::get('/posts/{slug?}', function ($slug = 'default') {
return "Post: $slug";
});
// 複数
Route::get('/users/{user}/posts/{post}', function ($user, $post) {
return "User $user, Post $post";
});
// 正規表現制約
Route::get('/users/{id}', fn ($id) => "User $id")
->where('id', '[0-9]+');
Route::get('/articles/{slug}', fn ($slug) => "Article $slug")
->where('slug', '[a-z0-9\-]+');
// グローバル制約(RouteServiceProvider::boot)
Route::pattern('id', '[0-9]+');
// where ショートカット
Route::get('/posts/{id}', ...)->whereNumber('id');
Route::get('/users/{name}', ...)->whereAlpha('name');
Route::get('/posts/{slug}', ...)->whereAlphaNumeric('slug');
Route::get('/lang/{code}', ...)->whereIn('code', ['ja', 'en', 'zh']);
名前付きルートと URL 生成
// 名前を付ける
Route::get('/users/{id}', [UserController::class, 'show'])
->name('users.show');
// URL を生成する側
$url = route('users.show', ['id' => 1]);
// → https://example.com/users/1
// Blade
{{ $user->name }}
// リダイレクト
return redirect()->route('users.show', $user);
// 現在のルートが特定の名前か判定
if (request()->routeIs('users.*')) { ... }
ルートグループ(prefix / middleware / namespace)
// 管理画面: /admin/* で auth.admin ミドルウェア
Route::prefix('admin')
->name('admin.')
->middleware(['auth', 'can:access-admin'])
->group(function () {
Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
// 名前は admin.dashboard、URL は /admin/dashboard
Route::resource('users', AdminUserController::class);
});
// API v1
Route::prefix('api/v1')->middleware('throttle:60,1')->group(function () {
Route::get('/users', [Api\UserController::class, 'index']);
});
// サブドメイン
Route::domain('{tenant}.example.com')->group(function () {
Route::get('/dashboard', function ($tenant) {
return "Tenant: $tenant";
});
});
Resource ルート(CRUD 7 本まとめて)
Route::resource('photos', PhotoController::class);
// これ 1 行で次の 7 ルートが作られる
// GET /photos photos.index list
// GET /photos/create photos.create form (new)
// POST /photos photos.store create
// GET /photos/{photo} photos.show read
// GET /photos/{photo}/edit photos.edit form (edit)
// PUT /photos/{photo} photos.update update
// DELETE /photos/{photo} photos.destroy delete
// 一部だけ
Route::resource('photos', PhotoController::class)->only(['index', 'show']);
Route::resource('photos', PhotoController::class)->except(['destroy']);
// API リソース(create / edit を除外)
Route::apiResource('photos', PhotoController::class);
// 複数まとめて
Route::apiResources([
'photos' => PhotoController::class,
'posts' => PostController::class,
]);
Route Model Binding
パラメータをそのまま Eloquent モデルに自動変換できます:
// /users/1 → $user = User::findOrFail(1)
Route::get('/users/{user}', function (User $user) {
return $user->name; // 自動的に Model インスタンス
});
// id 以外をキーにする
Route::get('/posts/{post:slug}', function (Post $post) {
return $post->title;
});
// モデルで明示
class Post extends Model {
public function getRouteKeyName() {
return 'slug';
}
}
ルート一覧とキャッシュ
# ルート一覧を確認
php artisan route:list
php artisan route:list --path=admin
php artisan route:list --method=POST
# 本番ではルートをコンパイル(高速化)
php artisan route:cache
# ルートを変更したら必ずクリア
php artisan route:clear
# 本番デプロイ時の標準セット
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan event:cache
web.php と api.php の違い
| 項目 | web.php | api.php |
|---|---|---|
| URL プレフィックス | なし | /api |
| ミドルウェアグループ | web(セッション・CSRF・Cookie) | api(throttle:api のみ) |
| セッション | あり | なし |
| CSRF 保護 | あり | なし |
| 用途 | ブラウザ用 | SPA / モバイル API |
カスタムミドルウェアとフォールバック
// ミドルウェア指定
Route::get('/admin', ...)->middleware('auth', 'can:admin');
Route::get('/x', ...)->withoutMiddleware(['throttle:60,1']);
// 404 フォールバック
Route::fallback(function () {
return view('errors.404');
});
FAQ
Q: ルート定義の順序は重要?
A: 重要。/users/create を /users/{id} より前に書かないと、create が {id} に拾われます。
Q: クロージャでなくコントローラを使うべき?
A: 簡単な処理はクロージャ可。ただし route:cache が効くのはクロージャを使っていないときのみ。本番ではコントローラ推奨。
Q: API のレート制限を変えたい
A: Route::middleware('throttle:60,1')(60 req/分)。詳細は RouteServiceProvider::configureRateLimiting() でカスタム定義。
ページの作成
親となるページを選択してください。
親ページに紐づくページを子ページといいます。
例: 親=スポーツ, 子1=サッカー, 子2=野球
子ページを親ページとして更に子ページを作成することも可能です。
例: 親=サッカー, 子=サッカーのルール
親ページはいつでも変更することが可能なのでとりあえず作ってみましょう!
同階層のページ
- インストールと設定
- クイックスタート & チュートリアル(初心者向け)
- クイックスタート & チュートリアル(中級者向け)
- ルーティング
- Bladeテンプレート(ビュー/レイアウト)
- コントローラー
- マイグレーションとテーブル定義
- データベースの設定
- Eloquentモデル (ORM)
- SQLとクエリビルダー
- バリデーション
- .envファイルの設定値へのアクセス
- 動作環境による分岐処理
- configフォルダ配下の設定値へのアクセス
- assetヘルパーを利用したpublicフォルダへのアクセス
- storageフォルダへのアクセス
- アプリケーション名の変更
- メンテナンス
- ログイン画面(認証システム)の作成
- ログインの必須化
- ログインユーザー情報の取得
- ルートの認証化
- 本番サーバーへのデプロイ方法
- 多言語化
- csrf_field
- ファイルのダウンロード
- CSVのアップロードおよび読み込み(maatwebsite/excel)
- ページタイトルの設定
- コマンド一覧
- エラー一覧
- SQLの実行ログ出力方法
- キャッシュのクリア
- Selectの結果の最初もしくは最後に任意の値を追加する方法
- ajaxでPOST通信する際の注意点
- ソーシャルログインの実装
- セッション情報の確認
- ログイン、ユーザー登録、パスワードリセット後のリダイレクト先の変更方法
- redirectやreturn viewにメッセージを付与する方法
- クッキー(cookie)の設定と取得
- クラスの再読み込み
- csrfの有効時間を変更する方法
- ViewComposerを用いてviewに共通の値を付与する方法
- View::shareを用いて共通の値を各ビューに渡す方法
- ミドルウェアを用いた処理の共通化
- Middleware内でAuth::check()などを使用する方法
- Controller以外でリダイレクトする方法
- セッションの値の取得/保存/更新/削除
- $requestの値を変更する方法
- 常時SSL化
- ページング(ページネーション)をする方法
- vue.jsとの連携
- Vue.jsと連携するSPA実行環境構築
- .envの値をvue.jsで参照する方法
- vue.jsを本番環境にリリースする方法
- could not find driver(Windows, MySQL編)
人気ページ
- 1 Eclipseで「サーバーに追加または除去できるリソースがありません。」の原因と対処法
- 2 tomcat の起動 / 停止ログと catalina.log・catalina.out の違い
- 3 JavaScript base URL 取得方法|window.location.origin と SSR/Node.js 対応
- 4 YouTube Data API v3 エラー一覧|403/400/404 の主要原因と切り分け
- 5 Spring Frameworkのアノテーション一覧
- 6 Laravel エラー一覧|500/Blade/DB 接続/ルーティングの代表エラー
- 7 3Dグラフィックスとは|モデリング/レンダリング/主要ソフトウェア (Blender / Maya)
- 8 【Spring】@Valueアノテーションとは
- 9 CATALINA_HOME の確認方法 (Linux / Mac)
- 10 【Spring】@Autowiredアノテーションとは
最近更新/作成されたページ
- Laravel キャッシュクリア完全ガイド(cache:clear / config:clear / 2026-05-18 07:42:07
- プロジェクトの作成と削除 2026-05-18 07:42:07
- インストール直後にNetbeansが反応しない 2026-05-18 07:42:07
- 動画やチャンネルの検索 2026-05-18 07:42:07
- APIキー取得方法 2026-05-18 07:42:07
- チャンネル情報の取得 2026-05-18 07:42:07
- API 入門 — Web API(REST / GraphQL / gRPC / 2026-05-18 07:42:07
- インストール(eclipseプラグイン) 2026-05-18 07:42:07
- Laravel「Dotenv values containing spaces must be surrounded 2026-05-18 07:42:07
- エラー一覧 2026-05-18 07:42:07
- curl: (51) SSL: certificate subject name '~' does not match 2026-05-18 07:42:07
- インストール方法(Windows版) 2026-05-18 07:42:07
- JSONから配列に変換 2026-05-18 07:42:07
- 処理を一定時間待つ 2026-05-18 07:42:07
- A non well formed numeric value encountered 2026-05-18 07:42:07
コメントを削除してもよろしいでしょうか?