欢迎各位兄弟 发布技术文章
这里的技术是共享的
镀铬/火狐都会自带一些调试工具可以帮助我们调试前端资讯,如CSS,JavaScript的...等,但若要调试后端的Laravel资讯呢?如有了ORM之后虽然方便,但我们可能对其产生的SQL有所有疑虑,想深入了解其所产生的SQL是否符合我们的需求,这些在Barry vd。Heuvel的Laravel Debugbar都可以满足我们。
Laravel 5.1
Laravel Debugbar 2.0
1
|
oomusou @ mac:〜/ MyProject $ composer require barryvdh / laravel-debugbar --dev
|
在专案目录下,使用作曲家将Laravel debugbar安装到目前专案中。
根据Laravel debugbar官网的说明档,并没有加上-dev,这会使得Laravel调试器被装在composer.json的要求区段,而非require-dev区段,这会造成在正式上线主机也会安装Laravel debugbar,这是不需要的。
composer require
执行完,composer.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才会启动。
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在正式上线主机被注册载入。
在Laravel debugbar官网的说明档,是教人直接在config/app.php
的providers
加入Barryvdh\Debugbar\ServiceProvider::class
,这样虽然可行,但会导致正式上线主机也会载入Laravel调试器,虽然会使用APP_DEBUG=false
Laravel调试器不会在正式上线主机执行,但还是会影响Laravel启动时间,也较浪费记忆体。
为了方便我们更容易使用Laravel debugar显示变数,建议将Laravel Debugbar加入立面。
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进行设定。
1
|
APP_ENV =本地
APP_DEBUG =真
|
Laravel Debugbar只有在APP_ENV=local
与APP_DEBUG=true
下才会启动,确认.env
设定正确。
在下方会出现Laravel Debugbar,因为他是纯HTML,所以各种浏览器都可使用。
在Queris
会显示目前所|网页过执行SQL的,可借此观察ORM所产生的SQL是否有调整的空间。
实务上我们可以直接将调试讯息显示在Laravel Debugbar,这样就不用使用echo()
或dd()
将原本的网页弄乱了。
Laravel Debugbar提供了以下方法:
1 2 3 |
Debugbar :: info($ object); Debugbar :: error('Error!'); Debugbar :: warning('Watch out ...'); |
实务上我们常会需要自行使用计时器评估一段演算法或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 ... }); |
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是开发者的神兵利器
,但若不小心安装在正式上线主机,则成为骇客的最好的入侵工具
。
由于vendor
与没有进GIT中,所以势必在正式主机也要重新安装包,在composer install
时,要切记安装加上--no-dev
参数,再回顾一下我们的composer.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” }, |
require-dev
区段,因此加上--no-dev
之后,composer将不会在正式上线主机安装Laravel调试器。
1
|
APP_ENV =生产
APP_DEBUG = FALSE
|
切记将APP_DEBUG=false
,确保Laravel调试器不会在正式上线主机执行。
完整的范例可以在我的GitHub的上找到。
来自 http://oomusou.io/laravel/laravel-debugbar/