LoginSignup
93

More than 1 year has passed since last update.

Laravel のルーティングのまとめ方

Last updated at Posted at 2019-10-24

Laravel5.8ですが、ほかのバージョンでも問題ないと思います。

viewフォルダ

SC000004.JPG

ルーティング

これをまずまとめずにルーティングすると、一般的にこのようになるではないでしょうか。
なお、私はルート名(->nameの部分)については、viewと合わせているので今回もそのように記述しています。

web.php
Route::get('/main/list','MainController@list')->name('main.list');
Route::get('/main/edit','MainController@edit')->name('main.edit');
Route::get('/main/search','MainController@search')->name('main.search');

これを、/main部分が共通なので,Route::prefixを使いまとめることができます。

prefixメソッドはグループ内の各ルートに対して、指定されたURIのプレフィックスを指定するために使用します。

web.php
Route::prefix('main')->group(function () {
    Route::get('list','MainController@list')->name('main.list');
    Route::get('edit','MainController@edit')->name('main.edit');
    Route::get('search','MainController@search')->name('main.search');
});

これとは別にルート名でまとめると下記のようになります

web.php
Route::name('main.')->group(function () {
    Route::get('/main/list','MainController@list')->name('list');
    Route::get('/main/edit','MainController@edit')->name('edit');
    Route::get('/main/search','MainController@search')->name('search');
});

ただ、URIでもまとめたくて、ルート名についてもまとめたい時や、ここにmiddlewareが加わってそれでもまとめたい時があります。

その場合 Route::groupが使えます。

ルートグループは多くのルートで共通なミドルウェアや名前空間のようなルート属性をルートごとに定義するのではなく、一括して適用するための手法です。Route::groupメソッドの最初の引数には、共通の属性を配列で指定します。

下記のように、一つずつでも、複数でも使えるので、共通でまとめられる様なら積極的に使いたいところです。

web.php
//複数(URI、ルート名)でのグループ化
Route::group(['prefix' => 'main', 'as' => 'main.'], function () {
    Route::get('list','MainController@list')->name('list');
    Route::get('edit','MainController@edit')->name('edit');
    Route::get('search','MainController@search')->name('search');
});

//URIでのグループ化
Route::group(['prefix' => 'main'], function () {
    Route::get('list','MainController@list')->name('main.list');
    Route::get('edit','MainController@edit')->name('main.edit');
    Route::get('search','MainController@search')->name('main.search');
});

//ルート名でのグループ化
Route::group(['as' => 'main.'], function () {
    Route::get('/main/list','MainController@list')->name('list');
    Route::get('/main/edit','MainController@edit')->name('edit');
    Route::get('/main/search','MainController@search')->name('search');
});

//ミドルウェアでのグループ化
Route::group(['middleware' => ['auth']], function () {
    Route::get('/main/list','MainController@list')->name('main.list');
    Route::get('/main/edit','MainController@edit')->name('main.edit');
    Route::get('/main/search','MainController@main')->name('main.search');
});

// whereもつかえる
Route::group(['prefix' => '{user_id}', 'where' => ['user_id' => '[0-9]+']], function () {
    Route::get('/edit','UserController@edit')->name('users.edit');
});

間違いや、より良い方法がありましたらご指摘宜しくお願いします。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
93