PHP全局安装Laravel的dd函数

相信使用过laravel框架的同学都不会对dump和dd这2个命令陌生。这2个函数在平时的开发过程中用的频率是非常的高,而且输出样式对于浏览器以及命令行也是非常的友好。

但是如果你使用的不是laravel而且是其他的框架,比如Codeigniter又或者是Yii等框架,可能默认就不会带有类似的命令。那么本次记录下只要在任何的PHP环境中就能使用dd及dump函数,就像使用普通函数一样。

全局安装symfony/var-dumper

打开命令行,输入以下命令:

composer global require symfony/var-dumper

刚命令将会在composer全局安装symfony/var-dumper

通过命令执行后的结果可以看到,全局composer的路径在:

C:\Users\用户名\AppData\Roaming\Composer

这个目录下。

配置php.ini

打开php.ini的位置,搜索auto_prepend_file,将值填写为全局composer的所在位置:

auto_prepend_file = C:/Users/用户名/AppData/Roaming/Composer/vendor/autoload.php

修改保存后,重新服务器。重启后,dump函数已经可以使用了,但还无法使用dd

引入dd

C:\Users\Jason\AppData\Roaming\Composer目录下,新建一个文件夹:helper,然后在helper文件夹里新建一个global.php的文件,内容如下:

<?php

# install symfony/var-dump
# 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);
    }
}

然后打开C:\Users\Jason\AppData\Roaming\Composer\composer.json,在里面自动加载该文件:

{
    "require": {
        "symfony/var-dumper": "^3.4"
    },
    "autoload": {
        "files": [
                "helper/global.php"
        ]
    }
}

保存后,重新构建autoload:

composer global dump-autoload

现在,可以愉快的dd了~

打印数组不全的bug

发现打印数组时出现如下情况,无法看到数组的具体元素:

通过开启报错看到是\vendor\symfony\var-dumper\Dumper\CliDumper.php 第180行:

$attr += [
    'length' => 0 <= $cut ? mb_strlen($str, 'UTF-8') + $cut : 0,
    'binary' => $bin,
];

+=改成=就可以了。

发表评论

邮箱地址不会被公开。 必填项已用*标注