在其他框架中使用 dump () & dd () 函式

蝸牛發表於2017-05-25

Laravel 框架用久了後,就習慣了在除錯的時候使用 Laravel 的輔助函式 dd() 了。

當切換到其他框架的時候,沒有找到比較好的類似該輔助函式的工具。因此萌生了從 Laravel 框架中將他們給抽取出來。

這是一篇更好的做法的文章:PHP 全域性使用 Laravel 輔助函式 dd,推薦直接看這篇


> **如果你的環境是 Docker,推薦直接看這篇:[PHP 全域性使用 Laravel 輔助函式 dd (補充:docker 環境下全域性使用)](https://learnku.com/articles/5075/php-global-uses-the-laravel-helper-function-dd)**

檔案放在 Gist 訪問需自帶『 梯子 』。

使用方式

  1. 在專案根目錄執行 composer require symfony/var-dumper
  2. 在專案入口檔案將專案根目錄中的 vendor/autoload.php 進行載入。
  3. 訪問 Gist ,將檔案儲存為 helper.php
  4. 在專案根目錄的 composer.json 檔案的 autoload 欄位中將 helper.php 相對於 composer.json 的路徑(和 composer.json 的相對路徑)新增上。
  5. 在專案中執行 composer dump-autoload

這裡是一段 composer.json 的示例:

{
    .
    .
    .
    "require": {
        .
        .
        .
    },
    "autoload": {
        "files": [
                "path/to/helper.php"
        ]
    },
    .
    .
    .
}

現在應該就可以愉快的使用 輔助函式 dd() 了。:smile:

為了方便沒有 fq 的朋友,我將檔案的內容放在下面。直接儲存為 helper.php 即可

<?php

# install symfony/var-dump to your project
# composer require symfony/var-dumper

// use namespace
use Symfony\Component\VarDumper\Cloner\VarCloner;
use Symfony\Component\VarDumper\Dumper\CliDumper;
use Symfony\Component\VarDumper\Dumper\HtmlDumper as SymfonyHtmlDumper;

/**
 * Class HtmlDumper
 */
class HtmlDumper extends SymfonyHtmlDumper
{
    /**
     * Colour definitions for output.
     *
     * @var array
     */
    protected $styles = [
        'default' => 'background-color:#fff; color:#222; line-height:1.2em; font-weight:normal; font:12px Monaco, Consolas, monospace; word-wrap: break-word; white-space: pre-wrap; position:relative; z-index:100000',
        'num' => 'color:#a71d5d',
        'const' => 'color:#795da3',
        'str' => 'color:#df5000',
        'cchr' => 'color:#222',
        'note' => 'color:#a71d5d',
        'ref' => 'color:#a0a0a0',
        'public' => 'color:#795da3',
        'protected' => 'color:#795da3',
        'private' => 'color:#795da3',
        'meta' => 'color:#b729d9',
        'key' => 'color:#df5000',
        'index' => 'color:#a71d5d',
    ];
}

/**
 * Class Dumper
 */
class Dumper
{
    /**
     * Dump a value with elegance.
     *
     * @param  mixed  $value
     * @return void
     */
    public function dump($value)
    {
        if (class_exists(CliDumper::class)) {
            $dumper = 'cli' === PHP_SAPI ? new CliDumper : new HtmlDumper;
            $dumper->dump((new VarCloner)->cloneVar($value));
        } else {
            var_dump($value);
        }
    }
}

if (! function_exists('dd')) {
    /**
     * Dump the passed variables and end the script.
     *
     * @param  mixed
     * @return void
     */
    function dd(...$args)
    {
        foreach ($args as $x) {
            (new Dumper)->dump($x);
        }
        die(1);
    }
}

if (! function_exists('dda')) {
    /**
     * Dump the passed array variables and end the script.
     *
     * @param  mixed
     * @return void
     */
    function dda(...$args)
    {
        foreach ($args as $x) {
            (new Dumper)->dump($x->toArray());
        }
        die(1);
    }
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結
Study hard and make progress every day. Study hard and make progress every day.

相關文章