Why not login to Qiita and try out its useful features?

We'll deliver articles that match you.

You can read useful information later.

103
95

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 のルーティングのまとめ方

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

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

103
95
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

Qiita Conference 2025 will be held!: 4/23(wed) - 4/25(Fri)

Qiita Conference is the largest tech conference in Qiita!

Keynote Speaker

ymrl、Masanobu Naruse, Takeshi Kano, Junichi Ito, uhyo, Hiroshi Tokumaru, MinoDriven, Minorun, Hiroyuki Sakuraba, tenntenn, drken, konifar

View event details
103
95

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?