Laravel Debug Bar 只顯示給admin或指定用戶
有關Laravel debug 之前寫過2篇有關的記錄,在Larave11, 因為middleware 更換了位置,我重新分享一下,此版本亦都是最人性化的設定
前題假設你已經用了用戶登入的套件等等,我是用 Laravel-jetstream
安裝
方法1
composer require barryvdh/laravel-debugbar
方法2 如果你想只安裝在開發期, 實際線上 營運環境不使用, 可以這樣安裝
composer require barryvdh/laravel-debugbar --dev
如果你是使用本文章以方法1, 繼續進行以下的設定
建立 Middleware
php artisan make:middleware DebugbarMiddleware
編輯 DebugbarMiddleware
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
use Barryvdh\Debugbar\Facades\Debugbar;
class DebugbarMiddleware
{
public function handle(Request $request, Closure $next)
{
Debugbar::disable();
if ($request->hasSession() && Auth::check() && Auth::user()->debug == 1) {
Debugbar::enable();
}
return $next($request);
}
}
這邊我假設在User Model 中加入了名為 debug
的欄位,只在1的時候才會顯示
把DebugbarMiddleware
加入 bootstrap/app.php
在bootstrap/app.php
找到 withMiddleware
的$middleware->group('web')
加入2行
use Illuminate\Foundation\Configuration\Middleware; //加入此行
.....
->withMiddleware(function (Middleware $middleware) {
$middleware->web([
\Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance::class,
\Illuminate\Cookie\Middleware\EncryptCookies::class,
\Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse::class,
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class,
\Illuminate\Foundation\Http\Middleware\VerifyCsrfToken::class,
\App\Http\Middleware\DebugbarMiddleware::class, //加入此行
]);
})
->withExceptions(function (Exceptions $exceptions) {
$exceptions->render(function (\Symfony\Component\HttpKernel\Exception\NotFoundHttpException $e) {
\Barryvdh\Debugbar\Facades\Debugbar::disable();
if (class_exists('\Barryvdh\Debugbar\Facades\Debugbar')) {
\Barryvdh\Debugbar\Facades\Debugbar::clear();
}
return null;
});
})->create();
此處只加入DebugbarMiddleware
可能有問題,因為一旦用了 $middleware->group('web', []);
就會 覆蓋系統原有的引入,所以需要把系統原有的引入都在寫一次
withExceptions()
加入這一段,是為了不在404頁面顯示,否則只要去了404頁面是一定會顯示debug的
用處
為什麼線上版也要用debug? 因為效率檢查,其實在本地開發期我很少用到,因為運作快慢可能因開發環境影響,不太會在意。但是線上運作版本我們需要真實知道效率問題,所以反而在線上版我用得更多。但不喜歡終是開開關關的,所以用Middleware
去做設定。 以往甚至會用Auth::user()->id==1
去判斷是否打開debug,但我發現如果有足夠複雜的情況我有時想要以用戶角度去測試效率,終不可能一直去改php更換ID吧? 所以在用戶數據庫中加入 debug 一欄去判斷是否打開Laravel debugbar,如果後台有編輯用戶的頁面,直接可在網頁中打開或關閉,連數據庫也不用進入。暫時是我最理想的流程。