在其他框架中使用 dump () & dd () 函数
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 访问需自带『 梯子 』。
使用方式
- 在项目根目录执行
composer require symfony/var-dumper
。 - 在项目入口文件将项目根目录中的
vendor/autoload.php
进行加载。 - 访问 Gist ,将文件保存为
helper.php
。 - 在项目根目录的 composer.json 文件的 autoload 字段中将
helper.php
相对于 composer.json 的路径(和 composer.json 的相对路径)添加上。 - 在项目中执行
composer dump-autoload
。
这里是一段 composer.json
的示例:
{
.
.
.
"require": {
.
.
.
},
"autoload": {
"files": [
"path/to/helper.php"
]
},
.
.
.
}
现在应该就可以愉快的使用 辅助函数
dd()
了。
为了方便没有 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 协议》,转载必须注明作者和本文链接
本帖由 Summer
于 7年前 加精
把dd()的方法复制一份放到项目里面就可以了(我是这样做的)
@生活无限好 如果在 yii 框架中,tp 中呢?我是为了在 yii 中使用。
@蜗牛 我就是从laravel复制到tp里面呀,每个框架都会有放扩展函数的文件的,只是文件的目录不同
都是php写的,无非就是那些东西
@生活无限好 只是因为这个调试方便,所以弄过去了嘛。
@蜗牛 你这样做也很对的呀,而且很方便
@生活无限好 引入过去后,把所有 laravel 的 辅助函数 dd() 需要的代码都放在一个文件里面了,所以按照这样的步骤执行下来就可以用它调试。(^__^) ……
不过如果只是用个别函数的话,我个人觉得还是直接复制粘贴的好,特别是团队开发的时候我就不太喜欢composer update
我之前团队的要求是可以参考别人的写法,但是能不用别人的包就尽量不用
@生活无限好 恩,理解,一个包的依赖可能很庞大。为了一点点东西去引入许多用不着的东西没必要。
@蜗牛 而我就需要跟着源代码一层一层的找到核心后再一层一层的复制过去。。。
@生活无限好 恩
不过我倒是没复制过dd()之类的函数(因为我喜欢用print_r跟echo。。),主要用的是处理字符串之类的
@生活无限好 我喜欢他的缩进,处理数组,看着可以自己展开,感觉方便,print_r() 一次性全部打印出来了,echo() 我也会选择用
个人有个人的喜好,自己开心最重要
@生活无限好 恩
make
@东方皓 我算是学到了,拼音的马克,英文的mark...
@蜗牛 这才发现打错了,兄弟眼力好啊
@东方皓 百度猜知道你的是什么意思:smile: 没事。
TP5中就可以用dump();
如何安装低版本的 能够支持5.4的var-dumper
@hainuo 我也不知道,什么时间看看源码再说:joy:
在项目中执行compoer dump-autoload 有笔误, 应该是composer
@longlywork 万分感谢:smiley: :+1:
@蜗牛 难道不知道print_r()吗
echo“
@o0風無痕0o 知道呀。只有在 无法全局安装 这个 package 的情况下。我才会使用 echo、var_dump、var_export、sprintf、print_r 来调试。多数情况用 var_dump 和 var_export。