Laravelでweb.phpのルートのまとめ方

Laravelでweb.phpのルートのまとめ方

22 回閲覧されました

みなさんこんにちは、jonioです。

今回はweb.phpでのルートのまとめ方についてのメモになります。

Laravelの無料学習サイトを作りました

Laravelを勉強したい人向けの無料の学習サイトを作りました。

ここからリンクに飛べますのでぜひ利用してください。

サンプルコード

下記のコードに対して考えます。

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

prefixを使う場合

URLの最初が全て「/main」になっています。

こんな場合はまとめることができて下記のコードにすればいいです。

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

1行目の「::prefix(‘main’)」があることでそれぞれのルートの「/main/」を除くことができます。

nameを使う場合

全てのルート設定で「->name(‘main.〜’)」がありますが「main.」をまとめることができます。

下記の記述をします。

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

1行目の「::name(‘main.’)」があることで「main.」をまとめることができます。

「->name(‘main.list’)」・「->name(‘main.edit’)」・「->name(‘main.search’)」ですが「main.」の「.」がない場合も同じことができます。

例えば下記だったとします。

Route::prefix('main')->group(function () {
    Route::get('/list','MainController@list')->name('mainlist');
    Route::get('/edit','MainController@edit')->name('mainedit');
    Route::get('/search','MainController@search')->name('mainsearch');
});

mainをひとまとめにして下記の書き方ができます。

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

prefixとnameを同時に使う

これも可能です。

サンプルコードに適用すると下記の書き方になります。

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

prefix(‘main’)とname(‘.main’)はどっちを先に書いても大丈夫です。