LoginSignup
29

More than 3 years have passed since last update.

【Laravel】ルートのグループ化。Route::groupメソッドの役割について。(prefixとnameメソッドも))

Last updated at Posted at 2021-01-14

Laravelのルートファイルで頻繁に登場するRoute::groupの意味について。

▼こういうの

web.php
Route::group(['prefix' => 'topics', 'as' => 'topics.'], function() {
        Route::get('/', 'TopicController@index')->name('index');
        Route::get('{filename}.html', 'TopicController@show')->name('show');
    });


目次

  1. Route::groupの意味
  2. 実例
  3. コントローラアクションの場合
  4. ミドルウェアを適用する場合
  5. prefixメソッド
  6. nameメソッド


Route::groupの意味

Routeファサードのgroupメソッドを呼び出している。
このメソッドで、URIの接頭部名前空間の接頭部を共通化できる。

類似したルートを複数記述する場合に便利なメソッド

groupメソッドの前に別のメソッドがきて、チェーンでつなぐパターンもある。

・例:Route::middleware()->group();


groupメソッドの構文

group(['prefix' => '共通するURI', 'as' => '共通するルート名' ]{ Route::get(); Route::get();,,,  })

prefixasはどちらか一方、あるいはどちらも無しでも作動する。


実例

view/topicsディレクトリに、index, show, detailの3つのビューがある場合

image.png

通常のルーティング

それぞれのルートを作成する場合は以下のようになる。

Route::get('topics', function () { return view('topics.index'); })->name('topics.index');
Route::get('topics/show', function () { return view('topics.show'); })->name('topics.show');
Route::get('topics/detail', function () { return view('topics.detail'); })->name('topics.detail');

ここでは、URIのtopicsと、ルート名(nameメソッド)のtopics.が共通。

↓ グループ化

Route::group(['prefix' => 'topics', 'as' => 'topics.'], function() {
    Route::get('/', function () { return view('topics.index'); })->name('index');
    Route::get('show', function () { return view('topics.show'); })->name('show');
    Route::get('detail', function () { return view('topics.detail'); })->name('detail');
});

groupメソッドを使うと表記を省略できる。グルーピングできるので視認性も向上する。


コントローラアクションの場合

Route::get('topics', 'TopicsController@index' )->name('topics.index');
Route::get('topics/show', 'TopicsController@show' )->name('topics.show');
Route::get('topics/detail', 'TopicsController@detail' )->name('topics.detail');

↓ グループ化

Route::group(['prefix' => 'topics', 'as' => 'topics.'], function() {
    Route::get('/', 'TopicsController@index' )->name('index');
    Route::get('show', 'TopicsController@show' )->name('show');
    Route::get('detail', 'TopicsController@detail' )->name('detail');
});


ミドルウェアを適用する場合

Route::group(['middleware' => 'auth.very_basic'], function () {
    Route::get('/', function () {
        //
    });

    Route::get('/user/profile', function () {
        //
    });
});



middlewareメソッドを使って、groupメソッドをチェーンすることもできる。

Route::middleware(['first', 'second'])->group(function () {
    Route::get('/', function () {
        //
    });

    Route::get('/user/profile', function () {
        //
    });
});

上記例のgroupはprefixやnameの指定がないバージョン。指定したミドルウェアを適用するために個別にルートをまとめる時はこのような記述になる。

ミドルウェアとは?


prefixメソッド

prefixメソッドで共通するURIを記述してから、groupに適用する方法もある。

prefix('共通するURI接頭部')

Route::prefix('topics')->group(['as' => 'topics.'], function() {
    Route::get('/', 'TopicsController@index' )->name('index');
    Route::get('show', 'TopicsController@show' )->name('show');
    Route::get('detail', 'TopicsController@detail' )->name('detail');
});

nameメソッド

naemメソッドで共通するルート名を記述してから、groupに適用する方法もある。

prefix('共通するURI接頭部')

Route::name('topics.')->group(['prefix'=>'topics'], function() {
    Route::get('/', 'TopicsController@index' )->name('index');
    Route::get('show', 'TopicsController@show' )->name('show');
    Route::get('detail', 'TopicsController@detail' )->name('detail');
});

prefixメソッドとnameメソッドをチェーンする

各メソッドのチェーニングも可能。

Route::name('topics.')->group(['prefix'=>'topics'], function() {
    Route::get('/', 'TopicsController@index' )->name('index');
    Route::get('show', 'TopicsController@show' )->name('show');
    Route::get('detail', 'TopicsController@detail' )->name('detail');
});

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
29