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

24 回閲覧されました
みなさんこんにちは、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’)はどっちを先に書いても大丈夫です。