如何使用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上找到。
如何使用Laravel Debugbar?的更多相关文章
- Laravel Debugbar
Installation Require this package with composer: composer require barryvdh/laravel-debugbar After up ...
- Laravel 调试利器 —— Laravel Debugbar 扩展包安装及使用教程
1.简介 Laravel Debugbar 在 Laravel 5 中集成了 PHP Debug Bar ,用于显示调试及错误信息以方便开发.该扩展包包含了一个 ServiceProvider 用于注 ...
- Laravel --- 【转】安装调试利器 Laravel Debugbar
[转]http://www.tuicool.com/articles/qYfmmur 1.简介 Laravel Debugbar 在 Laravel 5 中集成了 PHP Debug Bar ,用于显 ...
- Laravel 调试器 Debugbar 和数据库导出利器 DbExporter 扩展安装及注意事项
一.Debugbar安装 参考:Laravel 调试利器 —— Laravel Debugbar 扩展包安装及使用教程 的“2.安装”部分 二.DbExporter安装 参考:Laravel 扩展推荐 ...
- Laravel 5 性能优化技巧
说明 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表 ...
- laravel性能优化
1. 配置信息缓存 使用以下 Artisan 自带命令,把 config 文件夹里所有配置信息合并到一个文件里,减少运行时文件的载入数量: php artisan config:cache 上面命令会 ...
- 10个技巧优化PHP程序Laravel 5框架
10个技巧优化PHP程序Laravel 5框架 性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践www.itxdl.c ...
- laravel 5 优化
性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表: 配 ...
- 十个 Laravel 5 程序优化技巧
性能一直是 Laravel 框架为人诟病的一个点,所以调优 Laravel 程序算是一个必学的技能. 接下来分享一些开发的最佳实践,还有调优技巧,大家有别的建议也欢迎留言讨论. 这里是简单的列表: 配 ...
随机推荐
- 关于JavaScript的词法作用域及变量提升的个人理解
关于JavaScript的作用域,最近听到一个名词:“词法作用域”:以前没有听说过(读书少),记录一下对此的理解,加深印象. 词法作用域:在JavaScript中,一个函数的作用域,在这个函数定义好的 ...
- 【Python】【demo实验18】【练习实例】【统计输入字符串中,数字的个数、英文字母的个数及其他符号的个数】
原题: 输入一行字符,分别统计出其中英文字母.空格.数字和其它字符的个数. (本题暂时不支持中文字符及汉字) 我的代码: #!/usr/bin/python # encoding=utf-8 # -* ...
- Python +requests 关于post请求返回报错
python+request 发送post请求:msg返回"Content type 'application/octet-stream' not supported" 一.问题源 ...
- 小菜鸟之servlet
# Servlet课程-1和2和3 容 Web项目 项目代码部署在服务器上, 一般分为c\s(客户端\服务器端)和b\s(浏览器/服务器) 服务器 常用的服务器(tomcat服务器) tomcat的目 ...
- DAO语句如何定义属性类型
字体设置:代码 14px 文字 幼圆 15px public interface IAddressDAO { //添加地址 public boolean doCreate(Address addres ...
- PHP给图片添加文字水印实例
PHP给图片添加文字水印实例,支持中文文字水印,是否覆盖原图,自定义设置水印背景色.文字颜色.字体等. 水印类water.class.php var $Path = "./"; / ...
- Yii2.0 组件
框架之所以是框架,是因为其强大,其封装了很多实用的功能,开发者可以开箱即用. 下边列举Yii2.0的部分组件: var_dump(Yii::$app->session->getId()); ...
- MHA原理及搭建
MYSQL5.7下搭建MHA 环境说明 在主机1,主机2,主机3上安装MySQL服务端和客户端. 主机1 主机2 主机3 操作系统 CentOS7.4 CentOS7.4 CentOS7.4 主机名 ...
- X86逆向7:特殊窗体的破解思路
本章我们来看两个案例,这两个案例同样使用爆破的方式破解,但是与其他的程序不同,这个程序没有弹窗,提示成功或失败使用的是图片或是一个类似图片的窗体,本章将学习两个新的API函数的使用技巧. ------ ...
- 版本管理工具svn(转)
这种操作类的文章就不自己再写了,感觉浪费时间. 找了一个写的不错的文章转载. 文中流程有些变动,但是问题不大,可能是版本原因. SVN服务器的本地搭建和使用 http://www.2cto.com/o ...