PHP 全局使用 Laravel 辅助函数 dd
前段时间写过一篇 PHP 调试函数的对比 调试代码之 dd VS var_dump VS print_r ?,架不住口嫌体正,其中 Laravel 的辅助函数 dd()
一旦用上瘾了就很难戒了,经常会不自觉地在调试代码的时候用上它,然后就悲剧了。
之前有个人发表了一篇 在其他框架中使用 dump () & dd () 函数,讲如何在其他框架中使用 dd(),但这有个很麻烦的地方,就是每一个不是 Laravel 的项目你都得做这样的配置。甚至在团队开发中,很多情况下并不允许你提交可能只有你自己在使用的调试代码。
@cjjian 同学的博客里面有一篇 VarDumper高亮提示,里面有关于全局安装使用 composer 包的内容,灵机一动之下,我便心痒痒地就折腾起来了。
开始折腾
全局安装 : composer global require symfony/var-dumper
配置 php.ini
在 php.ini 中找到 auto_prepend_file,然后写上你相对应的路径,比如我的路径:
auto_prepend_file = /home/vagrant/.composer/vendor/autoload.php
不知道 php.ini 在哪?phpinfo() 一下你就知道~
更新 composer: composer global update
这样一来就可以使用 dump()
了。不过还不够,我们还要把 dd()
的代码放进来。
准备 dd()
找个地方复制以下代码(我直接命名成 laravel_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);
}
}
记下这个文件的路径,比如我的是:/var/www/composer/laravel_helper.php
更改全局 composer.json
然后我们找到全局的 composer.json 所在的位置,通常在用户根目录下,在 autoload 中增加这个文件的路径:
{
....
"require": {
.....
"symfony/var-dumper": "^3.3"
},
"autoload": {
"files": [
"/var/www/composer/laravel_helper.php"
]
}
}
最后更新一下,就可以 dd 用起来了! :laughing:composer global dump-autoload
Leo 大神的提醒:
symfony/var-dumper 这个扩展包只有一个依赖,但是如果哪天这个 polyfill-mbstring 升级到了2+,然后你的项目里依赖了 2+ 的 polyfill,而 var-dumper 没有跟上,可能就会造成问题。这种时候,记得把全局的更新一下就好了。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: