baklysystems/laravel-debugbar

Laravel的PHP调试栏集成

资助包维护!
barryvdh

v3.5.7 2021-05-13 20:18 UTC

README

Packagist License Latest Stable Version Total Downloads

这是一个用于将PHP调试栏集成到Laravel中的包。它包含一个 ServiceProvider,用于注册调试栏并将其附加到输出。您可以通过Laravel发布资源和进行配置。它启动了一些收集器以与Laravel一起工作,并实现了几个针对Laravel的定制数据收集器。它被配置为显示重定向和(jQuery)Ajax请求。请参阅文档以获取更多配置选项。

Debugbar 3.3 Screenshot

注意:仅在开发中使用DebugBar。它可能会减慢应用程序的运行速度(因为它需要收集数据)。因此,当遇到速度变慢时,尝试禁用一些收集器。

此包包括一些自定义收集器

  • QueryCollector:显示所有查询,包括绑定和计时
  • RouteCollector:显示当前路由的信息。
  • ViewCollector:显示当前加载的视图。(可选:显示共享数据)
  • EventsCollector:显示所有事件
  • LaravelCollector:显示Laravel版本和环境。(默认禁用)
  • SymfonyRequestCollector:用包含更多请求/响应信息的RequestCollector替换
  • LogsCollector:显示存储日志的最新条目。(默认禁用)
  • FilesCollector:显示由PHP包含/需要的文件。(默认禁用)
  • ConfigCollector:显示配置文件中的值。(默认禁用)
  • CacheCollector:显示所有缓存事件。(默认禁用)

为Laravel启动以下收集器

  • LogCollector:显示所有日志消息
  • SwiftMailCollector和SwiftLogCollector用于邮件

以及默认收集器

  • PhpInfoCollector
  • MessagesCollector
  • TimeDataCollector(包含启动和应用程序计时)
  • MemoryCollector
  • ExceptionsCollector

它还提供了一个简单的Facade接口,用于轻松记录消息、异常和时间

安装

使用composer安装此包。建议仅在开发时安装此包。

composer require barryvdh/laravel-debugbar --dev

Laravel使用包自动发现,因此不需要您手动添加ServiceProvider。

APP_DEBUGtrue时,将启用Debugbar。

如果您使用通配符/回退路由,请确保在您的App ServiceProviders之前加载Debugbar ServiceProvider。

Laravel无自动发现

如果您不使用自动发现,请将ServiceProvider添加到config/app.php中的providers数组。

Barryvdh\Debugbar\ServiceProvider::class,

如果您想使用Facade记录消息,请将此添加到您的app.php中的facades

'Debugbar' => Barryvdh\Debugbar\Facade::class,

默认情况下,如果APP_DEBUG=true,将启用分析器。您可以在配置中覆盖它(在debugbar.enabled)或通过在.env中设置DEBUGBAR_ENABLED。有关更多选项,请参阅config/debugbar.php。您还可以设置是否包含/排除供应商文件(FontAwesome、Highlight.js和jQuery)。如果您已经在您的网站上使用它们,请将其设置为false。您还可以通过将其设置为'js'或'css'来仅显示js或css供应商。 Highlight.js需要css + js,因此将其设置为true以进行语法高亮显示

使用发布命令将包配置复制到您的本地配置

php artisan vendor:publish --provider="Barryvdh\Debugbar\ServiceProvider"

Lumen

对于Lumen,请在bootstrap/app.php中注册不同的Provider

if (env('APP_DEBUG')) {
 $app->register(Barryvdh\Debugbar\LumenServiceProvider::class);
}

要更改配置,请将文件复制到您的配置文件夹并启用它

$app->configure('debugbar');

用法

现在您可以使用外观(当添加时)添加消息,使用PSR-3级别(调试、信息、通知、警告、错误、严重、警报、紧急)

Debugbar::info($object);
Debugbar::error('Error!');
Debugbar::warning('Watch out…');
Debugbar::addMessage('Another message', 'mylabel');

开始/停止计时

Debugbar::startMeasure('render','Time for rendering');
Debugbar::stopMeasure('render');
Debugbar::addMeasure('now', LARAVEL_START, microtime(true));
Debugbar::measure('My long operation', function() {
    // Do something…
});

或记录异常

try {
    throw new Exception('foobar');
} catch (Exception $e) {
    Debugbar::addThrowable($e);
}

还有可用于最常用调用的一些辅助函数

// All arguments will be dumped as a debug message
debug($var1, $someString, $intValue, $object);

start_measure('render','Time for rendering');
stop_measure('render');
add_measure('now', LARAVEL_START, microtime(true));
measure('My long operation', function() {
    // Do something…
});

如果您愿意,可以通过容器或外观添加您自己的DataCollectors

Debugbar::addCollector(new DebugBar\DataCollector\MessagesCollector('my_messages'));
//Or via the App container:
$debugbar = App::make('debugbar');
$debugbar->addCollector(new DebugBar\DataCollector\MessagesCollector('my_messages'));

默认情况下,Debugbar在

</body>

之前注入。如果您想自己注入Debugbar,请将配置选项'inject'设置为false,并使用自己的渲染器,并遵循http://phpdebugbar.com/docs/rendering.html

$renderer = Debugbar::getJavascriptRenderer();

注意:不使用自动注入,将禁用请求信息,因为那是添加在响应之后。您可以在配置中添加默认_request数据收集器作为替代。

运行时启用/禁用

您可以在运行时启用或禁用debugbar。

\Debugbar::enable();
\Debugbar::disable();

请注意。一旦启用,收集器就会被添加(并且可能会产生额外的开销),所以如果您想在生产中使用debugbar,请禁用配置并在需要时才启用。

Twig集成

Laravel Debugbar附带两个Twig扩展。这些扩展与rcrowe/TwigBridge 0.6.x进行了测试

将以下扩展添加到您的TwigBridge配置文件extensions.php中(或手动注册扩展)

'Barryvdh\Debugbar\Twig\Extension\Debug',
'Barryvdh\Debugbar\Twig\Extension\Dump',
'Barryvdh\Debugbar\Twig\Extension\Stopwatch',

Dump扩展将替换dump函数,以使用DataFormatter输出变量。Debug扩展添加了一个debug()函数,它将变量传递给消息收集器,而不是直接在模板中显示。它将参数转储出来,或当为空时,转储所有上下文变量。

{{ debug() }}
{{ debug(user, categories) }}

Stopwatch扩展添加了一个类似于Symfony/Silex Twigbridge的stopwatch标签

{% stopwatch "foo" %}
    …some things that gets timed
{% endstopwatch %}