35
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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');
});
35
29
0

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
35
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?