cms/app/Http/Middleware/DebugbarEnabler.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);
}
}