Laravelのroutesのas、prefix、namespaceについて

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()内の共通項をまとめることができる。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です