如何使用Laravel Debugbar?

非常好用的Laravel debug工具,一定要安装

Chrome/FireFox 都会自带一些 debug 工具可以帮助我们 debug 前端,如 CSS、JavaScript… 等,但若要 debug 后端的 Laravel 呢? 如有了 ORM 之后虽然方便,但我们可能对其产生的 SQL 有所疑惑,想深入了解其所产生的 SQL 是否符合我们的需求,这些在 Barry vd. Heuvel 的 Laravel Debugbar 都可以满足我们。

Version

  • Laravel 5.1
  • Laravel Debugbar 2.0

安装 Laravel Debugbar

使用 Composer 安裝

oomusou@mac:~/MyProject$ composer require barryvdh/laravel-debugbar --dev

在项目目录下,使用 composer 将 Laravel debugbar 安装到当前项目中。

为什么要加上 --dev 参数?

根据 Laravel debugbar 官网的说明文档,并没有加上 –dev,这会使得 Laravel debugbar 被装在 composer.json 的 require字段,而非 require-dev 字段,这会造成在正式线上环境也会安装 Laravel debugbar,这是不需要的。

composer require 会行完,composer.json 内容会如下所示 :

{
    "require": {
        "php": ">=5.5.9", "laravel/framework": "5.1.*" }, "require-dev": { "fzaninotto/faker": "~1.4", "mockery/mockery": "0.9.*", "phpunit/phpunit": "~4.0", "phpspec/phpspec": "~2.1", "laravel/homestead": "^2.1", "barryvdh/laravel-debugbar": "^2.0" } } 

新增 Service Provider

Composer 只是将 Laravel debugbar 安装到当前项目目录的 /vendor/barryvdh/laravel-debugbar 目录下,此时 Laravel 还不知道有这个 package,必須通过 service provider 的注册加载,Laravel debugbar 才可以使用。

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { // } /** * Register any application services. * * @return void */ public function register() { if ($this->app->environment() == 'local') { $this->app->register('Barryvdh\Debugbar\ServiceProvider'); } } } 

这里

public function register() { if ($this->app->environment() == 'local') { $this->app->register('Barryvdh\Debugbar\ServiceProvider'); } } 

在 register() 加入以上代码,只有在本机开发环境时,Laravel debugbar 才会被注册加载,如此可避免 Laravel debugbar 在正式环境被注册加载。

为什么不直接写在 config/app.php 呢?

在 Laravel debugbar 官方的说明文档,是教人直接在 config/app.php 的 providers 加入 Barryvdh\Debugbar\ServiceProvider::class,这样虽然可行,但会导致正式环境也会加载 Laravel debugbar,虽然 APP_DEBUG=false 可以让 Laravel debugbar 不会在正式环境加载,但还是会影响 Laravel 启动时间,比较浪费内存。

设置 Facade

为了方便我们更容易使用 Laravel debugar 显示变量,建议将 Laravel Debugbar 加入facade。

'aliases' => [
    (略)
    'Validator' => Illuminate\Support\Facades\Validator::class,
    'View' => Illuminate\Support\Facades\View::class, // Laravel Debugbar 'Debugbar' => Barryvdh\Debugbar\Facade::class, ], 

下面

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

加入Debugbar facade。

复制配置文件

oomusou@mac:~/MyProject$ php artisan vendor:publish

将 /vendor/barryvdh/laravel-debugbar/config/debugbar.php 复制到 /config/debugbar.php,将来你可以直接修改项目下的 /config/debugbar.php 对Laravel Debugbar 进行配置。

确认 .env

APP_ENV=local
APP_DEBUG=true 

Laravel Debugbar 只有在 APP_ENV=local 并且 APP_DEBUG=true 下才会启动,确认 .env 配置正确。

测试

在下方会出现 Laravel Debugbar,因为他是纯 HTML,所以各种浏览器都可使用。

使用Laravel Debugbar

观察SQL

在 Queris 会显示目前网页所执行过的SQL,可由此观察 ORM 所产生的的SQL是否有調整的空间。

观察 View

在 Views 会显示目前网页正使用了哪些view。

观察 Route 与 Controller

在 Route 会显示目前网页正使用哪个 route 与 controller。

觀察HTTP Request

在 Request 会显示目前网页使用 HTTP request 的状态。

自定义 Debug 信息

业务上我们可以直接将debug 信息显示在 Laravel Debugbar,这样就不用使用 echo() 或 dd() 将原本的网页弄乱了。

Laravel Debugbar 提供了以下方法 :

Debugbar::info($object);
Debugbar::error('Error!');
Debugbar::warning('Watch out…');

在 Message 可以看到我们自己的 debug 信息。

使用 Timer 评估效率

业务上我们常会需要自行使用 timer 评估一段算法或SQL的效率,Laravel Debugbar 提供了以下方法 :

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

在 Timeline 可以看到实际执行时间。

Debugbar::addMeasure('now', LARAVEL_START, microtime(true));

Debugbar::addMeasure() 的第1个参数为在 Debugbar 的识别文字,第2個参数为起始时间,第3個参数为结束时间。

下图为从 Laravel 启动到目前这个程序所花的时间。

使用 Helper Function

以上方式虽然方便,但还要使用到 Debugbar facade,Laravel debugbar 另外提供了 helper function,可以更简单的使用。

// 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… }); 
  • debug() 可以接受无限参数,每一个参数在 Messages 都会独立一行,属于 debug 分类。
  • start_measure() 相当于 Debugbar::startMeasure()
  • stop_measure() 相当于 Debugbar::stopMeasure()
  • add_measure() 相当于 Debugbar::addMeasure()
  • measure() 相当于 Debugbar::measure()

正式环境的安装考虑

Laravel Debugbar 是开发者的 神兵利器,但若不小心安装在正式环境,则成为黑客的最好的 入侵工具

使用 –no-dev 安裝

由于 vendor 没有加入 git 做版本管理,所以势必在正式环境也要重新安装 package,在composer install 时,切记要安装加上 --no-dev 参数,再回顾一下我们的 composer.json

"require": {
    "php": ">=5.5.9",
    "laravel/framework": "5.1.*" }, "require-dev": { "fzaninotto/faker": "~1.4", "mockery/mockery": "0.9.*", "phpunit/phpunit": "~4.0", "phpspec/phpspec": "~2.1", "laravel/homestead": "^2.1", "barryvdh/laravel-debugbar": "^2.0" }, 

由于 Laravel debugbar 是放在 require-dev 字段的,因此加上 --no-dev 之后,composer 将不会在正式环境安装 Laravel debugbar。

APP_DEBUG=false

APP_ENV=production
APP_DEBUG=false 

切记将 APP_DEBUG=false,确保 Laravel debugbar 不会在正式环境执行。

Conclusion

  • 凡是只有开发者本身在用的 package,都可以模仿这种方式注册和加载,这样除了可以避免将 package 安装到正式环境外,也可加速 Laravel 加载速度,更节省内存。
  • Laravel debugbar 是 Laravel 开发必用的 package,对于 debug 非常方便。
  • 由于 Laravel debugbar 功能过于强大,在正式环境要特別小心。

Sample Code

完整的例子可以在我的GitHub上找到。

转载于:https://www.cnblogs.com/onew/p/11356773.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值