如何使用Laravel Debugbar?

很是好用的Laravel debug工具,必定要安裝php

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 安裝到當前項目中。laravel

爲何要加上 --dev 參數?git

根據 Laravel debugbar 官網的說明文檔,並無加上 –dev,這會使得 Laravel debugbar 被裝在 composer.json 的 require字段,而非 require-dev 字段,這會形成在正式線上環境也會安裝 Laravel debugbar,這是不須要的。github

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 纔可使用。json

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 呢?bash

在 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上找到。

相關文章
相關標籤/搜索