Laravelのルーティングはどのファイルに書くべきか

こんにちはー!むちょこです。

「Laravelはどこでルーティングするの?」というご質問をいただいたので、記事でお答えします!

ディレクトリ

Laravelのルーティングファイル群は、Laravelプロジェクトのルートディレクトリ下にあるroutesディレクトリ内に置きます。

インストール時点で4つのファイルが予め用意されているので、基本的にはそれを使用すると便利です。

project
    ├─ app
    ├─ artisan
    │
    │
    ├─ routes
    │   ├─ api.php
    │   ├─ channels.php
    │   ├─ console.php
    │   └─ web.php

この4つのファイルについて、それぞれの用途をそれぞれ簡単にご紹介します!

routes/web.php

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

routes/web.phpでのルート定義例
Route::get('login', 'Auth\LoginController@showLoginForm');
Route::post('login', 'Auth\LoginController@login');
Route::post('logout', 'Auth\LoginController@logout');

ここで定義したルートはwebミドルグループウェアに割り当てられ、セッション状態やCSRF保護などの機能が提供されます。例えばPOSTメソッドで定義したルートはCSRF保護され、正しいCSRFトークンを含まないリクエストは拒否されます。

詳しい書き方等については、こちらをご覧ください?

https://readouble.com/laravel/6.x/ja/routing.html

routes/api.php

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

routes/api.phpのルート定義例
Route::group(['middleware' => 'api'], function() {
    Route::get('/products', 'RecommendController@index');
    Route::post('/user_choice', 'RecommendController@userChoice');

    Route::get('/genders', 'MasterController@getGenders');
    Route::get('/events', 'MasterController@getEvents');
});

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

routes/channels.php

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

routes/channels.phpのチャンネル登録例
Broadcast::channel('order.{orderId}', function ($user, $orderId) {
    return $user->id === Order::findOrNew($orderId)->user_id;
});

例にあるコードのように、プライベートチャンネルをリッスンできる権限を定義することができます。

コードはこちらの記事から引用しました。ブロードキャストについても知りたい方はぜひご覧ください?

https://readouble.com/laravel/6.x/ja/broadcasting.html

routes/console.php

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

Artisan::command('build {project}', function ($project) {
    $this->info("Building {$project}!");
});

コードはこちらの記事から引用しました。Artisanについても知りたい方はぜひご覧ください?

https://readouble.com/laravel/6.x/ja/artisan.html

ちなみにですが、クラスでコンソールコマンドを定義することも可能です。興味がある方はこちらの記事をご覧ください?

Artisanコマンドの自作方法とテストコード Artisanコマンドの自作方法とテストコード