Laravel5.8ですが、ほかのバージョンでも問題ないと思います。
#viewフォルダ
#ルーティング
これをまずまとめずにルーティングすると、一般的にこのようになるではないでしょうか。
なお、私はルート名(->nameの部分)
については、viewと合わせているので今回もそのように記述しています。
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のプレフィックスを指定するために使用します。
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');
});
これとは別にルート名でまとめると下記のようになります
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メソッドの最初の引数には、共通の属性を配列で指定します。
下記のように、一つずつでも、複数でも使えるので、共通でまとめられる様なら積極的に使いたいところです。
//複数(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');
});
間違いや、より良い方法がありましたらご指摘宜しくお願いします。