Laravel マルチログイン時のルーティングについて

Laravelのルーティングは、route\web.phpでとても楽にルーティングが出来るけど、いろいろ便利すぎてグルーピング、認証、namespace、prefix、nameとか混乱するのでメモ

マルチログイン環境の雛形を作るとこんなroutes\web.phpが出来上がる
↓参照

https://halfpower.work/2020/05/10/laravel-%e3%83%9e%e3%83%ab%e3%83%81%e3%83%ad%e3%82%b0%e3%82%a4%e3%83%b3%e7%92%b0%e5%a2%83%e3%81%ae%e6%a7%8b%e7%af%89%e6%96%b9%e6%b3%95/

<?php

// ユーザー
Route::namespace('User')->prefix('user')->name('user.')->group(function () {

    // ログイン認証関連
    Auth::routes([
        'register' => true,
        'reset'    => false,
        'verify'   => false
    ]);

    // ログイン認証後
    Route::middleware('auth:user')->group(function () {

        // TOPページ
        Route::resource('home', 'HomeController', ['only' => 'index']);

    });
});

// 管理者
Route::namespace('Admin')->prefix('admin')->name('admin.')->group(function () {

    // ログイン認証関連
    Auth::routes([
        'register' => true,
        'reset'    => false,
        'verify'   => false
    ]);

    // ログイン認証後
    Route::middleware('auth:admin')->group(function () {

        // TOPページ
        Route::resource('home', 'HomeController', ['only' => 'index']);

    });

});

まずはこの部分
Route::namespace(‘User’)->prefix(‘user’)->name(‘user.’)->group(function () {

■namespace

コントローラーの場所について
Route::namespace(‘User‘)
Route::get(‘home’, ‘HomeController’);

namespaceなし
Route::get(‘home’, ‘User\HomeController’);
は同じ

■prefix

リクエストするURLについて
Route::prefix(‘user‘)
Route::get(‘home’, ‘HomeController’);

prefixなし
Route::get(‘user/home’, ‘HomeController’);
は同じ

■name

nameについて
Route::name(‘user.‘)
Route::get(‘home’, ‘HomeController’)->name(‘home’)

nameなし
Route::get(‘user/home’, ‘HomeController’)->name(‘user.home’)
は同じ

ルーティングは基本、複数行からなるがnamespace, prefix, nameを設定してadminとuserなどでグルーピングしておけば、何度も同じことを書かなくてよくなる仕組み

例えば、URLには’user’は含めずに、Userフォルダにあるコントローラーに渡したい場合もweb.phpで出来る

例)
prefixは書かない   ‘/user’はURLに含めない
namespaceは’User’  コントローラーの場所は、Controller\User

Route::get(‘/’, ‘TopController@index’);
  ⇓
https://xxxxx/は、Controllers\User\TopControllerのindexメソッドに渡される。

■ログイン認証のいらないページ

ログインしなくても表示させたいページの場合

routes\web.php
   ・
   ・
   ・
// ログイン認証後 ※この外に記述する
Route::middleware(‘auth:user’)->group(function () {
 // TOPページ
 Route::resource(‘home’, ‘HomeController’, [‘only’ => ‘index’]);
});

// ログイン認証不要
Route::view(‘/logout’, ‘user.logout’)->name(‘user.logout’);

   ・
   ・
   ・

返信を残す

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