Laravelのroutesにはasとprefix、そしてnamespaceがある。
初学者の僕にとっては、それぞれ機能が似ているから少し整理したいと思う。
namespaceについて
namespaceはpath内のcontrollerがある場所を省略orまとめることができる。
以下が例。
// 登録画面
Route::get('/register', [Auth\RegisterController::class, 'index'])->name('register');
Route::post('/register', [Auth\RegisterController::class, 'new_user']);
このように新規登録周りについて、上記のようなroutesが書かれている。
これらroutesはcontrollerに共通して全てAuth\というコードが書かれている。
これらをまとめることができるのがnamespaceである。
以下が修正した例。
// 登録画面
Route::group(['namespace' => 'Auth'], function () {
Route::get('/register', [RegisterController::class, 'index'])->name('register');
Route::post('/register', [RegisterController::class, 'new_user']);
});
上記のように、controllerのパスからAuthが抜けてスッキリした。
prefixについて
routesをまとめるのに、他にprefixがある。
prefixは以下。
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');
これらはroute名に共通してmainと入っている。
これを省略できるのがprefix。
修正した例が以下。
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のuriから共通した/mainが省略できた。
asについて
最後にasを解説する。
asはrouteのnameの共通部分を省略することができる。
Route::get('list','MainController@list')->name('main.list');
Route::get('edit','MainController@edit')->name('main.edit');
Route::get('search','MainController@search')->name('main.search');
これをasを使ってまとめると以下。
Route::group(['as' => 'main'], function () {
Route::get('list','MainController@list')->name('list');
Route::get('edit','MainController@edit')->name('edit');
Route::get('search','MainController@search')->name('search');
});
上記の例のように、asを用いるとname()内の共通項をまとめることができる。
コメントを残す