タグ: namespace

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

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