【Laravel】ルーティングのグループ化
どーもこんにちはよーすけです。
今回はルーティングのグループ化について解説していくよ。
Laravelにおいてルーティングの設定は必ず必要になっていきます。
コントローラのメソッドを呼び出したり、直接ブレードファイルを呼び出したりさまざまな役割を果たしてくれます。
しかし、システムが大きくなるほど、ページ数が増えるほどルーティングの数も増加します。
そこでルーティングのグループ化という便利な機能が存在します。今回はグループ化について詳しく解説します。
ルートプレフィックスを使う
まずはルートプレフィックスを使わない場合のルートファイルを見てみましょう。
Route::post('admin/logout', 'App\Http\Controllers\Admin\LoginController@logout')->name('admin.logout'); Route::get('admin/home', 'App\Http\Controllers\Admin\HomeController@showOnlyInHouseUser')->name('admin.home'); Route::post('admin/home', 'App\Http\Controllers\Admin\HomeController@showOnlyInHouseUser'); Route::get('admin/css', 'App\Http\Controllers\Admin\CSSController@getViewData'); Route::get('admin/js', 'App\Http\Controllers\Admin\JSController@getViewData');
見にくいコードでここに他のルーティングがさらに追加されてしまうとさらに可読性が下がります。
そこでルートプレフィックスを使うと以下のようになります。
Route::prefix('admin')->group(function (){
Route::post('logout', 'App\Http\Controllers\Admin\LoginController@logout')->name('admin.logout');
Route::get('home', 'App\Http\Controllers\Admin\HomeController@showOnlyInHouseUser')->name('admin.home');
Route::post('home', 'App\Http\Controllers\Admin\HomeController@showOnlyInHouseUser');
Route::get('css', 'App\Http\Controllers\Admin\CSSController@getViewData');
Route::get('js', 'App\Http\Controllers\Admin\JSController@getViewData');
});
admin/の部分が省略されています。
prefix
の引数に共通のURLを指定すると省略することができます。
グループ化には単純に量を減らすというメリットもありますが、可読性を上げるために使われることが多いです。
コントローラのグループ化
先ほどはURLの方をグループ化しました。
Laravelにはコントローラをグループ化するメソッドが存在します。
それがcontrollerメソッドです。
使い方を説明します。
ルーティングはこちらを使います。
Route::get('admin/home', 'App\Http\Controllers\Admin\HomeController@showOnlyInHouseUser')->name('admin.home'); Route::post('admin/home', 'App\Http\Controllers\Admin\HomeController@showOnlyInHouseUser'); Route::get('admin/css', 'App\Http\Controllers\Admin\HomeController@getViewCSSData'); Route::get('admin/js', 'App\Http\Controllers\Admin\HomeController@getViewJSData');
これにコントローラメソッドを使うと以下のように省略できます。
useApp\Http\Controllers\Admin\HomeController;
Route::controller(HomeController::class)->group(function () {
Route::get('admin/home', 'showOnlyInHouseUser')->name('admin.home');
Route::post('admin/home', 'showOnlyInHouseUser');
Route::get('admin/css', 'getViewCSSData');
Route::get('admin/js', 'getViewJSData');
});
非常に記述量が減少しました。
同じコントローラでまとめることで記述量は減らせ、可読性は上げることができます。
useでコントローラのパスを指定するのをお忘れなく。
まとめ
今回はルーティングのグループ化について解説しました。
これからもLaravelの記事を中心に更新していく予定です。
コメント