Laravel version update
Laravel version update
This commit is contained in:
@@ -22,6 +22,7 @@ use DebugBar\DataCollector\MessagesCollector;
|
||||
use DebugBar\DataCollector\PhpInfoCollector;
|
||||
use DebugBar\DataCollector\RequestDataCollector;
|
||||
use DebugBar\DataCollector\TimeDataCollector;
|
||||
use Barryvdh\Debugbar\DataFormatter\QueryFormatter;
|
||||
use Barryvdh\Debugbar\Support\Clockwork\ClockworkCollector;
|
||||
use DebugBar\DebugBar;
|
||||
use DebugBar\Storage\PdoStorage;
|
||||
@@ -123,6 +124,11 @@ class LaravelDebugbar extends DebugBar
|
||||
|
||||
/** @var Application $app */
|
||||
$app = $this->app;
|
||||
|
||||
// Set custom error handler
|
||||
if ($app['config']->get('debugbar.error_handler' , false)) {
|
||||
set_error_handler([$this, 'handleError']);
|
||||
}
|
||||
|
||||
$this->selectStorage($debugbar);
|
||||
|
||||
@@ -198,7 +204,10 @@ class LaravelDebugbar extends DebugBar
|
||||
$this->addCollector(new ViewCollector($collectData));
|
||||
$this->app['events']->listen(
|
||||
'composing:*',
|
||||
function ($view) use ($debugbar) {
|
||||
function ($view, $data = []) use ($debugbar) {
|
||||
if ($data) {
|
||||
$view = $data[0]; // For Laravel >= 5.4
|
||||
}
|
||||
$debugbar['views']->addView($view);
|
||||
}
|
||||
);
|
||||
@@ -231,7 +240,16 @@ class LaravelDebugbar extends DebugBar
|
||||
$logger = new MessagesCollector('log');
|
||||
$this['messages']->aggregate($logger);
|
||||
$this->app['log']->listen(
|
||||
function ($level, $message, $context) use ($logger) {
|
||||
function ($level, $message = null, $context = null) use ($logger) {
|
||||
// Laravel 5.4 changed how the global log listeners are called. We must account for
|
||||
// the first argument being an "event object", where arguments are passed
|
||||
// via object properties, instead of individual arguments.
|
||||
if ($level instanceof \Illuminate\Log\Events\MessageLogged) {
|
||||
$message = $level->message;
|
||||
$context = $level->context;
|
||||
$level = $level->level;
|
||||
}
|
||||
|
||||
try {
|
||||
$logMessage = (string) $message;
|
||||
if (mb_check_encoding($logMessage, 'UTF-8')) {
|
||||
@@ -274,12 +292,15 @@ class LaravelDebugbar extends DebugBar
|
||||
}
|
||||
$queryCollector = new QueryCollector($timeCollector);
|
||||
|
||||
$queryCollector->setDataFormatter(new QueryFormatter());
|
||||
|
||||
if ($this->app['config']->get('debugbar.options.db.with_params')) {
|
||||
$queryCollector->setRenderSqlWithParams(true);
|
||||
}
|
||||
|
||||
if ($this->app['config']->get('debugbar.options.db.backtrace')) {
|
||||
$queryCollector->setFindSource(true);
|
||||
$middleware = ! $this->is_lumen ? $this->app['router']->getMiddleware() : [];
|
||||
$queryCollector->setFindSource(true, $middleware);
|
||||
}
|
||||
|
||||
if ($this->app['config']->get('debugbar.options.db.explain.enabled')) {
|
||||
@@ -321,6 +342,61 @@ class LaravelDebugbar extends DebugBar
|
||||
)
|
||||
);
|
||||
}
|
||||
|
||||
try {
|
||||
$db->getEventDispatcher()->listen([
|
||||
\Illuminate\Database\Events\TransactionBeginning::class,
|
||||
'connection.*.beganTransaction',
|
||||
], function ($transaction) use ($queryCollector) {
|
||||
|
||||
// Laravel 5.2 changed the way some core events worked. We must account for
|
||||
// the first argument being an "event object", where arguments are passed
|
||||
// via object properties, instead of individual arguments.
|
||||
if($transaction instanceof \Illuminate\Database\Events\TransactionBeginning) {
|
||||
$connection = $transaction->connection;
|
||||
} else {
|
||||
$connection = $transaction;
|
||||
}
|
||||
|
||||
$queryCollector->collectTransactionEvent('Begin Transaction', $connection);
|
||||
});
|
||||
|
||||
$db->getEventDispatcher()->listen([
|
||||
\Illuminate\Database\Events\TransactionCommitted::class,
|
||||
'connection.*.committed',
|
||||
], function ($transaction) use ($queryCollector) {
|
||||
|
||||
if($transaction instanceof \Illuminate\Database\Events\TransactionCommitted) {
|
||||
$connection = $transaction->connection;
|
||||
} else {
|
||||
$connection = $transaction;
|
||||
}
|
||||
|
||||
$queryCollector->collectTransactionEvent('Commit Transaction', $connection);
|
||||
});
|
||||
|
||||
$db->getEventDispatcher()->listen([
|
||||
\Illuminate\Database\Events\TransactionRolledBack::class,
|
||||
'connection.*.rollingBack',
|
||||
], function ($transaction) use ($queryCollector) {
|
||||
|
||||
if($transaction instanceof \Illuminate\Database\Events\TransactionRolledBack) {
|
||||
$connection = $transaction->connection;
|
||||
} else {
|
||||
$connection = $transaction;
|
||||
}
|
||||
|
||||
$queryCollector->collectTransactionEvent('Rollback Transaction', $connection);
|
||||
});
|
||||
} catch (\Exception $e) {
|
||||
$this->addThrowable(
|
||||
new Exception(
|
||||
'Cannot add listen transactions to Queries for Laravel Debugbar: ' . $e->getMessage(),
|
||||
$e->getCode(),
|
||||
$e
|
||||
)
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
if ($this->shouldCollect('mail', true) && class_exists('Illuminate\Mail\MailServiceProvider')) {
|
||||
@@ -402,6 +478,25 @@ class LaravelDebugbar extends DebugBar
|
||||
return $this->app['config']->get('debugbar.collectors.' . $name, $default);
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle silenced errors
|
||||
*
|
||||
* @param $level
|
||||
* @param $message
|
||||
* @param string $file
|
||||
* @param int $line
|
||||
* @param array $context
|
||||
* @throws \ErrorException
|
||||
*/
|
||||
public function handleError($level, $message, $file = '', $line = 0, $context = [])
|
||||
{
|
||||
if (error_reporting() & $level) {
|
||||
throw new \ErrorException($message, 0, $level, $file, $line);
|
||||
} else {
|
||||
$this->addMessage($message, 'deprecation');
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Starts a measure
|
||||
*
|
||||
@@ -577,6 +672,11 @@ class LaravelDebugbar extends DebugBar
|
||||
) {
|
||||
try {
|
||||
$this->sendDataInHeaders(true);
|
||||
|
||||
if ($app['config']->get('debugbar.add_ajax_timing', false)) {
|
||||
$this->addServerTimingHeaders($response);
|
||||
}
|
||||
|
||||
} catch (\Exception $e) {
|
||||
$app['log']->error('Debugbar exception: ' . $e->getMessage());
|
||||
}
|
||||
@@ -584,6 +684,7 @@ class LaravelDebugbar extends DebugBar
|
||||
($response->headers->has('Content-Type') &&
|
||||
strpos($response->headers->get('Content-Type'), 'html') === false)
|
||||
|| $request->getRequestFormat() !== 'html'
|
||||
|| $response->getContent() === false
|
||||
) {
|
||||
try {
|
||||
// Just collect + store data, don't inject it.
|
||||
@@ -599,6 +700,8 @@ class LaravelDebugbar extends DebugBar
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
return $response;
|
||||
}
|
||||
|
||||
@@ -866,7 +969,11 @@ class LaravelDebugbar extends DebugBar
|
||||
break;
|
||||
case 'redis':
|
||||
$connection = $config->get('debugbar.storage.connection');
|
||||
$storage = new RedisStorage($this->app['redis']->connection($connection));
|
||||
$client = $this->app['redis']->connection($connection);
|
||||
if (is_a($client, 'Illuminate\Redis\Connections\PredisConnection', false)) {
|
||||
$client = $client->client();
|
||||
}
|
||||
$storage = new RedisStorage($client);
|
||||
break;
|
||||
case 'custom':
|
||||
$class = $config->get('debugbar.storage.provider');
|
||||
@@ -890,4 +997,24 @@ class LaravelDebugbar extends DebugBar
|
||||
$response->headers->set('X-Clockwork-Version', 1, true);
|
||||
$response->headers->set('X-Clockwork-Path', $prefix .'/clockwork/', true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Add Server-Timing headers for the TimeData collector
|
||||
*
|
||||
* @see https://www.w3.org/TR/server-timing/
|
||||
* @param Response $response
|
||||
*/
|
||||
protected function addServerTimingHeaders(Response $response)
|
||||
{
|
||||
if ($this->hasCollector('time')) {
|
||||
$collector = $this->getCollector('time');
|
||||
|
||||
$headers = [];
|
||||
foreach ($collector->collect()['measures'] as $k => $m) {
|
||||
$headers[] = sprintf('%d=%F; "%s"', $k, $m['duration'], str_replace('"', "'", $m['label']));
|
||||
}
|
||||
|
||||
$response->headers->set('Server-Timing', $headers, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user