概要
laravelで開発を行なっている人であれば、
普段からweb.php
やapi.php
などのルーティング定義ファイルを触ったことがあるかと思います。
皆さんはルーティング定義をweb.php
に定義していますか?
それとも別のファイルに定義していますか?
この記事はweb.php
以外のファイルにルーティングを定義をする為の手順をまとめたものになります。
事前知識
知らなくても実装できますが、知ってた方が良さそうなこと。
手順
- ルーティングを定義したいファイルを作成
- サービスプロバイダを作成 or 既存のサービスプロバイダを編集
- 作成した場合はapp.phpに登録
ルーティングを定義したいファイルの作成
test.php
というファイルを作成し、そこにルーティングを定義したいとします。
<?php
// 'test'を返却
Route::get('/example', fn () => 'test');
今の状態では、/example
にアクセスしても404が返却されると思います。
サービスプロバイダを作成 or 編集
編集
既存のサービスプロバイダを編集します。
<?php
namespace App\Providers;
use Illuminate\Foundation\Support\Providers\RouteServiceProvider as ServiceProvider;
use Illuminate\Support\Facades\Route;
class RouteServiceProvider extends ServiceProvider
{
// 省略
/**
* Define the routes for the application.
*/
public function map(): void
{
$this->mapApiRoutes();
$this->mapWebRoutes();
// 追加したメソッドを呼び出す
$this->mapTestRoutes();
}
// このメソッドを追加
protected function mapTestRoutes(): void
{
// mapWebRoutes() などを参考にすればOK。
// ミドルウェアを設定したくない場合などは省略も可
Route::prefix('test')
->middleware('web')
->namespace($this->namespace)
->group(base_path('routes/test.php'));
}
// 省略
}
上記のように設定することで、routes/test.php
が読み込まれるように定義することができます。
またこのファイルで、web.php
やapi.php
を読み込む設定が実装されています。
作成
作成する場合は、App\Providers\RouteServiceProvider.php
を継承したサービスプロバイダを作成します。
<?php
namespace App\Providers;
use Illuminate\Support\Facades\Route;
class RouteRegistrarProvider extends RouteServiceProvider
{
public function map(): void
{
Route::prefix('test')
->middleware('web')
->namespace($this->namespace)
->group(base_path('routes/test.php'));
}
}
コマンド補足
Route::prefix('test')
->middleware('web')
->namespace($this->namespace)
->group(base_path('routes/test.php'));
prefix()
でルーティングファイルにプレフィックスを設定できます。
上記例だと、routes/test.php
に定義したルーティングに/test
のプレフィックスがつくようになります。namespace()
でコントローラーのルートを設定できます。
デフォルトだと、App\Http\Controllers
になっていると思います。group()
でルーティングファイルを設定します。
basepath()
でlaravelのインストールされた場所をベースにしたパスを返却するので、引数にはlaravelのルートからルーティング定義ファイルへの相対パスを指定。
app.phpに登録(プロバイダを作成した場合)
providers 配列の中に作成したプロバイダを追加すればOK
// 省略
'providers' => [
\App\Providers\RouteRegistrarProvider::class,
]
ここまでの手順完了後に/test/example
にアクセスすると、画面にtest
と表示されると思います。(多分)
まとめ
- 意外と簡単
- 既存のプロバイダを編集して良いし、新たに作成しても良い
- 新しく作成した場合は、app.phpに登録すべし
わかりにくい部分や、間違っているところなどあったら教えていただけるとありがたいです!