PHP 全局使用 Laravel 辅助函数 dd

全局安装

1
$ composer global require symfony/var-dumper 2.7.*

加上固定版本号是因为如果本地低版本的 Laravel 项目(比如 Laravel 5.1),它里面依赖的版本是 2.7.* ,如果不指定版本会安装最新的 3.3.*,由于在 Laravel 项目中:

1
2
3
4
5
if (! function_exists('dd')) {
function dd(){
...
}
}

的缘故,导致使用全局定义的 dd function 。会出现不兼容报错的情况。

配置 php.ini

在 php.ini 中找到 auto_prepend_file,然后写上你相对应的路径,比如我的路径:

1
auto_prepend_file = "C:/Users/Administrator.N27NDU1NHONBOGF/AppData/Roaming/Composer/vendor/autoload.php"

更新 composer

1
$ composer global update

这样一来就可以使用 dump() 了。不过还不够,我们还要把 dd() 的代码放进来。

准备 dd()

找个地方复制以下代码(我直接命名成 debugHelper.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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
<?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);
}
}

记下这个文件的路径,比如我的是:D:/composer/debugHelper.php

更改全局 composer.json

然后我们找到全局的 composer.json 所在的位置,通常在用户根目录下,在 autoload 中增加这个文件的路径:

1
2
3
4
5
6
7
8
9
10
11
12
{
....
"require": {
.....
"symfony/var-dumper": "2.7.*"
},
"autoload": {
"files": [
"D:/composer/debugHelper.php"
]
}
}

最后更新一下,就可以 dd 用起来了!

1
$ composer global dump-autoload