欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

如何使用Laravel Debugbar? 有大用

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

镀铬/火狐都会自带一些调试工具可以帮助我们调试前端资讯,如CSS,JavaScript的...等,但若要调试后端的Laravel资讯呢?如有了ORM之后虽然方便,但我们可能对其产生的SQL有所有疑虑,想深入了解其所产生的SQL是否符合我们的需求,这些在Barry vd。HeuvelLaravel Debugbar都可以满足我们。


Laravel 5.1 
Laravel Debugbar 2.0

安装Laravel Debugbar


使用作曲安装

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

在专案目录下,使用作曲家将Laravel debugbar安装到目前专案中。

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

根据Laravel debugbar官网的说明档,并没有加上-dev,这会使得Laravel调试器被装在composer.json要求区段,而非require-dev区段,这会造成在正式上线主机也会安装Laravel debugbar,这是不需要的。

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

/config.json
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12
“require”:{ phb “> = 5.5.9”“laravel / framework”“5.1。*” },“require-dev”:{ “fzaninotto / faker”〜1.4 mockery /解嘲”“0.9 *” “PHPUnit的/ PHPUnit的”“〜4.0” “phpspec / phpspec” : “〜2.1” “laravel /宅基地”“^ 2.1” “barryvdh / laravel-debugbar”“^ 2.0” },
    
    


    
    
    
    
    
    

 

新增服务提供商

Composer只是将Laravel调试器安装到目前专案目录的/vendor/barryvdh/laravel-debugbar目录下,此时Laravel还不知道有这个包,必须透过服务提供商的注册载入,Laravel debugbar才会启动。

/app/Providers/AppServiceProvider.php
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
22 
23 
24 
25 
26 
27 
28 
29
命名空间 App \ Providers ;

使用 Illuminate \ Support \ ServiceProvider ;

 AppServiceProvider  扩展了 ServiceProvider
{ / **      *引导任何应用程序服务。     *      * @return void      * / public function boot () { //     }
    




      
    
        


    / ** 
     *注册任何应用服务。
     * 
     * @return void 
     * / public function register () { if$ this - > app-> environment()== 'local'        { $ this - > app-> register('Barryvdh \ Debugbar \ ServiceProvider');         }     } }
      
    
        

            



 

22行

1 
2 
3 
4 
5 
6 
7
公共 功能 寄存器()
{ if$ this - > app-> environment()== 'local'    { $ this - > app-> register('Barryvdh \ Debugbar \ ServiceProvider');     } }
    

    	


 

register()加入以上程式码,只有在本機開發环境时,Laravel debugbar才会被注册载入,如此可避免Laravel debugbar在正式上线主机被注册载入。

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

在Laravel debugbar官网的说明档,是教人直接在config/app.phpproviders加入Barryvdh\Debugbar\ServiceProvider::class,这样虽然可行,但会导致正式上线主机也会载入Laravel调试器,虽然会使用APP_DEBUG=falseLaravel调试器不会在正式上线主机执行,但还是会影响Laravel启动时间,也较浪费记忆体。

设定门面

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

/config/app.php
1 
2 
3 
4 
5 
6 
7
'aliases' => [ 
    (略)'Validator' => Illuminate \ Support \ Facades \ Validator :: class,'View'       => Illuminate \ Support \ Facades \ View :: class,// Laravel Debugbar'Debugbar' => Barryvdh \ Debugbar \ Facade :: class,    ],
    
    
    
    

 

第5行

1 
2
// Laravel Debugbar'Debugbar 
' => Barryvdh \ Debugbar \ Facade :: class

 

加入Debugbar门面。

复制设定档

1
oomusou @ mac:〜/ MyProject $ php artisan vendor:publish

/vendor/barryvdh/laravel-debugbar/config/debugbar.php复制到/config/debugbar.php,将来你可以直接修改专案下的/config/debugbar.php对Laravel Debugbar进行设定。

确认.ENV

/.env
1
APP_ENV =本地
APP_DEBUG =真

Laravel Debugbar只有在APP_ENV=localAPP_DEBUG=true下才会启动,确认.env设定正确。

测试

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

使用Laravel Debugbar


观察SQL

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

观察查看

Views会显示目前正|网页使用了哪些视图。

观察路线与控制器

Route会显示目前正|网页使用哪个路线与控制器。

观察HTTP请求

Request会显示目前网页使用HTTP请求的状态。

自行加入调试资讯

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

Laravel Debugbar提供了以下方法:

1 
2 
3
Debugbar :: info($ object); 
Debugbar :: error('Error!'); 
Debugbar :: warning('Watch out ...');

 

Message可以看到我们自己的调试讯息。

使用计时器评估效能

实务上我们常会需要自行使用计时器评估一段演算法或SQL的效能,Laravel Debugbar提供了以下方法:

1 
2 
3 
4 
5 
6
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可以看到实际执行时间。

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

Debugbar::addMeasure()的第1个参数为在Debugbar的识别文字,第2个参数为起始时间,第3个参数为结束时间。
下图为从Laravel启动到目前这行程式所花的时间

使用帮助功能

以上方式虽然方便,但还要使用到Debugbar外观,Laravel调试器另外提供了帮助功能,可以更简单的使用。

1 
2 
3 
4 
5 
6 
7 
8 
9
//所有参数将被转储为调试消息
 debug($ var1$ someString$ intValue$ object);

start_measure('render''渲染时间'); 
stop_measure('render'); 
add_measure('now',LARAVEL_START,microtime(true)); 
measure('My long operation'function ()  { // Do something ... });
    

 

  • debug()可以接受无限参数,一个每在参数Messages都会独立一行,归于调试分类。
  • start_measure()相当于Debugbar::startMeasure()
  • stop_measure()相当于Debugbar::stopMeasure()
  • add_measure()相当于Debugbar::addMeasure()
  • measure()相当于Debugbar::measure()

正式上线主机的安装考量


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

使用-no-dev的安装

由于vendor与没有进GIT中,所以势必在正式主机也要重新安装包,在composer install时,要切记安装加上--no-dev参数,再回顾一下我们的composer.json

/config.json
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12
“require”:{ phb “> = 5.5.9”“laravel / framework”“5.1。*” },“require-dev”:{ “fzaninotto / faker”〜1.4 mockery /解嘲”“0.9 *” “PHPUnit的/ PHPUnit的”“〜4.0” “phpspec / phpspec” : “〜2.1” “laravel /宅基地”“^ 2.1” “barryvdh / laravel-debugbar”“^ 2.0” },
    
    


    
    
    
    
    
    

由于Laravel调试器是放在require-dev区段,因此加上--no-dev之后,composer将不会在正式上线主机安装Laravel调试器。

 

APP_DEBUG = FALSE

/.env
1
APP_ENV =生产
APP_DEBUG = FALSE

切记将APP_DEBUG=false,确保Laravel调试器不会在正式上线主机执行。

结论


  • 凡是只有开发者本身在用的包,都可以模仿这种方式注册与载入,这样除了可以避免将封装安装到正式上线主机外,也可加速Laravel启动速度,更节省记忆体。
  • Laravel debugbar是Laravel开发必用的包,对于debug非常方便。
  • 由于Laravel调试功能过于强大,在正式主机要特别小心。

示例代码


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

来自 http://oomusou.io/laravel/laravel-debugbar/


普通分类: