【Laravelの機能についてまとめてみよう】~~~Routing編~~~

laravel

今回は、【Laravelの機能についてまとめてみよう】第一弾です。
第一弾は….. 『Routing』についてです!!

※Laravel バージョンは8をベースにしております。

目次

――――――――――――――――――――――――――――
① Routingとは
② 基礎
③ 発展
④ まとめ
――――――――――――――――――――――――――――

① Routing とは

Routing(ルーティング)は特定のURLにアクセスされたときに「どのような処理をするのか」といったことを定義することです。
例)https://*** といったサイトがあるとします。
https://***/loginにアクセスされた場合にどう処理をするのか指定することができます。
以下のサイトも参考にしてみてください。
↓↓※公式リファレンスを日本語訳しているサイト↓↓
https://readouble.com/laravel/8.x/ja/routing.html

② 基礎

すべてのLaravelルートは、routesディレクトリにあるルートファイルで定義します。これらのファイルはApp\Providers\RouteSerciveProviderに記載されているのもを自動的に読み込んでいます。

デフォルトでは、以下の4つのファイルがあります。それぞれみていきましょう。
project
├─ app
├─ 略(config database public 等)
├─ resoures
├─ routes
│  ├─ api.php
│  ├─ channels.php
│  ├─ console.php
│  └─ web.php

【api.php】
api.phpには、APIとしてステートレスに使いたいルートを定義します。
記載例)

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

※ここで定義したルートはapiミドルグループウェアに割り当てられ、URIに /api というプレフィックスがつきます。

【channels.php】
channels.phpは、ブロードキャストのチャンネルを登録するために使います。
記載例)

Broadcast::channel('App.Models.User.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});

※ブロードキャストについての詳細は以下のサイトをご覧ください。
https://readouble.com/laravel/8.x/ja/broadcasting.html

【console.php】
console.phpは、コンソールベースのエントリポイントを定義するために使います。
記載例)

Artisan::command('inspire', function () {
    $this->comment(Inspiring::quote());
})->purpose('Display an inspiring quote');

※Artisanコンソールについての詳細は以下のサイトをご覧ください。
https://readouble.com/laravel/8.x/ja/artisan.html

【web.php】
web.phpには、Webからアクセスしてほしいルートを定義します。
記載例)

Route::get('/', [HomeController::class, 'index'])->name('home');
Route::get('login', [LoginController::class, 'showLoginForm');
Route::post('login', [LoginController::class, 'login');

※ここで定義したルートはwebミドルグループウェアに割り当てられ、セッション状態やCSRF保護などの機能が提供されます。例えばPOSTメソッドで定義したルートはCSRF保護され、正しいCSRFトークンを含まないリクエストは拒否されます。詳細は以下のサイトをご覧ください。
https://readouble.com/laravel/8.x/ja/routing.html

③ 発展

基礎はデフォルトで用意されているRoutingファイルをみていきました。
発展では独自のカスタムRoutingファイルの作成について調べていきましょう!

デフォルトのRouteファイルは4つあるものの、実際に処理を記載するのは、ほぼweb.phpになります。
そこで、web.phpの肥大化を防ぐために新たなRouteファイルを追加して処理を分ける必要があります。その方法をまとめていきたいと思います。
(※今回はwebと同じmiddleware群を使用します。)

[1] Route定義ファイルの追加
project
├─ 略(app config database public resources 等)
├─ routes
│  ├─ api.php
│  ├─ channels.php
│  ├─ console.php
│  ├─ web.php
│  └─ sample.php (追加ファイル)

[2] サービスプロバイダに追加ファイルの登録
Routeを管理している App\Providers\RouteServiceProvider.phpのbootメソッドにある、$this->routes();のコールバックfunctionにsampleのRouteを渡す。
例)

$this->routes(function () {
    Route::middleware('api')
        ->prefix('api')
        ->group(base_path('routes/api.php'));
                         
    Route::middleware('web')
        ->group(base_path('routes/web.php'));
                         
    Route::prefix(sample)
        ->as('sample.')
        ->middleware('web')
        ->group(base_path('routes/sample.php'));
});

※webとは違うmiddleware群を使用したい場合は、App\Http\Kernel.phpの$middlewareGroupsに新しく記載する。
例)webのmiddlewareGroups

'web' => [
    \App\Http\Middleware\EncryptCookies::class,
    \Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
    \Illuminate\Session\Middleware\StartSession::class,
    \Illuminate\View\Middleware\ShareErrorsFromSession::class,
    \App\Http\Middleware\VerifyCsrfToken::class,
    \Illuminate\Routing\Middleware\SubstituteBindings::class,
],

④ まとめ

このようにURLを指定したり、フォームからデータ送信する際に「処理先(ルート)」を決めるのがLaravelのRoutingとなります。

以上、簡単にではありますが大まかなRoutingについてまとめてきました。
Routeを深堀りするとまだまだまとめきれてないことが多いので
次の機会に紹介できればと思います!