87 lines
2.6 KiB
PHP
87 lines
2.6 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Middleware;
|
|
|
|
use Closure;
|
|
|
|
/**
|
|
* 開啟或關閉debugbar並處理
|
|
*
|
|
* Class DebugbarEnabler
|
|
* @package App\Http\Middleware
|
|
*/
|
|
class DebugbarEnabler
|
|
{
|
|
/**
|
|
* Cookie及Session存放的Key
|
|
*
|
|
* @var string
|
|
*/
|
|
private $cookieAndSessionKey = '__debugbar_enabled';
|
|
|
|
/**
|
|
* 啟用/停用時的參數Key
|
|
*
|
|
* @var string
|
|
*/
|
|
private $switchRequestKey = '__debugbar';
|
|
/**
|
|
* Handle an incoming request.
|
|
*
|
|
* @param \Illuminate\Http\Request $request
|
|
* @param \Closure $next
|
|
* @return mixed
|
|
*/
|
|
public function handle($request, Closure $next)
|
|
{
|
|
|
|
|
|
if(class_exists('\Debugbar') && config('app.debug')) {
|
|
//要被回傳的Cookie
|
|
$setDebugbarCookie = false;
|
|
//切換Debugbar
|
|
$enableDebugbar = false;
|
|
//有切換的參數請求時
|
|
if($request->get($this->switchRequestKey) !== null) {
|
|
if($request->get($this->switchRequestKey) === 'enable') {
|
|
//參數為enable時設定Session與Cookie
|
|
$request->session()->put($this->cookieAndSessionKey, 1);
|
|
$enableDebugbar = $setDebugbarCookie = 1;
|
|
} else {
|
|
//參數不為enable時設定Session與Cookie
|
|
$request->session()->forget($this->cookieAndSessionKey);
|
|
$enableDebugbar = $setDebugbarCookie = 0;
|
|
}
|
|
}
|
|
//此次請求有切換Debugbar
|
|
if($enableDebugbar !== false) {
|
|
if($enableDebugbar == 1) {
|
|
\Debugbar::enable();
|
|
} else {
|
|
\Debugbar::disable();
|
|
}
|
|
//此次請求沒有切換Debugbar
|
|
} else {
|
|
//如Cookie或Session有值則啟用Debugbar
|
|
if($request->session()->get($this->cookieAndSessionKey) == 1 || $request->cookies->get($this->cookieAndSessionKey) == 1) {
|
|
\Debugbar::enable();
|
|
} else {
|
|
\Debugbar::disable();
|
|
}
|
|
}
|
|
//如有設定Cookie
|
|
if($setDebugbarCookie !== false) {
|
|
$cookie = null;
|
|
if($setDebugbarCookie == 1) {
|
|
$cookie = cookie()->forever($this->cookieAndSessionKey, 1);
|
|
} else {
|
|
$cookie = cookie()->forget($this->cookieAndSessionKey);
|
|
}
|
|
return $next($request)->withCookie($cookie);
|
|
}
|
|
}
|
|
|
|
return $next($request);
|
|
}
|
|
}
|