【Laravel】ルーティングのグループ化

【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の記事を中心に更新していく予定です。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

よーすけのアバター よーすけ プログラマー

2022年4月 大阪自社開発会社入社
使用言語:JavaScript / PHP / Laravel / Vue.js / (WordPress)
勉強中:React / Next.js / TypeScript

Web制作実績:6件
デザインからコーディング、運用まで幅広く行います
ご依頼はお問い合わせフォームからお願いします。

コメント

コメントする

目次