VarDumper组件
编辑该页面警告:你浏览的文档欧宝体育电话欧宝娱乐app下载地址Symfony 4.1,不再维护。
读这个页面的更新版本Symf欧宝娱乐app下载地址ony 6.2(当前的稳定版本)。
VarDumper组件
VarDumper组件提供了机制提取任何PHP变量的状态。之上,它提供了一个更好
dump ()
功能,您可以使用代替var_dump。
安装
1
美元作曲家要求- dev symfony / va欧宝娱乐app下载地址r-dumper
或者,您可以克隆的https://github.com/欧宝娱乐app下载地址symfony/var-dumper存储库。
请注意
如果你安装这个组件之外的Symfony应用程序,你必须要求欧宝娱乐app下载地址供应商/ autoload.php
文件在你的代码,使作曲家提供的类加载机制。读这篇文章为更多的细节。
请注意
如果使用它在一个Symfony应用程序,确欧宝娱乐app下载地址保DebugBundle已经安装(或运行作曲家需要symfony / de欧宝娱乐app下载地址bug-bundle
安装它)。
dump()函数
VarDumper组件创建一个全球性的dump ()
功能,您可以使用,而不是如。var_dump。通过使用它,您将获得:
- 每个对象和资源类型专业观点如过滤原则内部而倾倒一个代理实体,或得到更多的洞察力在打开文件stream_get_meta_data;
- 可配置的输出格式:HTML或彩色命令行输出;
- 转储内部引用的能力,要么是软的(对象或资源)或硬的(
= &
数组或对象属性)。重复出现相同的对象数组/资源不会出现一次又一次了。此外,你可以检查你的参考结构数据; - 运营能力的输出缓冲处理程序。
例如:
1 2 3 4 5 6 7 8 9
需要__DIR__。“/供应商/ autoload.php”;/ /创建一个变量,它可以是任何东西!美元someVar=……;转储(美元someVar);/ /转储()返回传递的值,所以你可以转储一个对象并继续使用它转储(美元someObject)- >someMethod ();
默认情况下,选择输出格式和目标是基于你当前的PHP SAPI:
- 在命令行(CLI SAPI),输出
STDOUT
。这可奇怪因为这绕过一些PHP的输出缓冲机制; - 在其他sapi,转储被编写为常规的HTML输出。
请注意
如果你想赶上转储输出作为一个字符串,请阅读先进的文档欧宝体育电话它包含的例子。您还将了解如何更改格式或将输出重定向到任何你想要的。
提示
以有dump ()
函数总是可用的运行时任何PHP代码,你可以在你的电脑安装它在全球范围内:
- 运行
全球需要symfony / var-dumper欧宝娱乐app下载地址作曲家
; - 添加
auto_prepend_file = ${回家}/ .composer /供应商/ autoload.php
到你的php . ini
文件; - 不时地运行
全球更新symfony / var-dumpe欧宝娱乐app下载地址r作曲家
有最新的bug修复。
提示
VarDumper组件还提供了一个dd ()
(“转储和死”)helper函数。这个函数转储的变量使用dump ()
并立即结束的执行脚本(使用退出)。
4.1
的dd ()
是在Symfony 4.1中引入的辅助方法。欧宝娱乐app下载地址
转储文件服务器
4.1
转储文件服务器是在Symfony 4.1中引入的。欧宝娱乐app下载地址
的dump ()
函数输出其内容在同一个浏览器窗口或控制台终端作为您自己的应用程序。有时混合调试输出的实际产出可以混淆。这就是为什么这个组件提供了一个服务器收集所有倾倒的数据。
在启动服务器服务器:转储
命令,每当你打电话dump ()
,把数据不会显示在输出发送到服务器,但是,它输出自己的控制台或一个HTML文件:
1 2 3 4 5 6
#显示了数据在控制台:美元/ bin /控制台服务器:转储[好]服务器监听tcp: / / 0.0.0.0:9912#把数据存储在一个文件使用HTML格式:美元/ bin /控制台服务器:转储= html > dump.html——格式
在Symfony应欧宝娱乐app下载地址用程序中,服务器的输出转储配置了dump_destination选项的调试
包:
- YAML
- XML
- PHP
1 2 3
#配置/包/ debug.yaml调试:dump_destination:“tcp: / / % env (VAR_DUMPER_SERVER) %”
1 2 3 4 5 6 7 8 9 10 11
< !——配置/包/调试。xml - - >< ?xml version = " 1.0 " encoding = " utf - 8 " ? ><容器xmlns=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/debug”xmlns: xsi=“http://www.w3.org/2001/XMLSchema-instance”xmlns:调试=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/debug”xsi: schemaLocation=“http://欧宝娱乐app下载地址www.oldmanjams.com/schema/dic/services //www.oldmanjams.com/schema/dic/services/services-1.0.xsd //www.oldmanjams.com/schema/dic/debug //www.oldmanjams.com/schema/dic/debug/debug-1.0.xsd”><调试:配置dump-destination=“tcp: / / % env (VAR_DUMPER_SERVER) %”/ >< /容器>
1 2 3 4
/ /配置/包/ debug.php美元容器- >loadFromExtension (“调试”,(“dump_destination”= >“tcp: / / % env (VAR_DUMPER_SERVER) % ']);
在Symfony应用欧宝娱乐app下载地址程序使用ServerDumper类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
需要__DIR__。“/供应商/ autoload.php”;使用欧宝娱乐app下载地址\组件\VarDumper\VarDumper;使用欧宝娱乐app下载地址\组件\VarDumper\切割\VarCloner;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\CliDumper;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\ContextProvider\CliContextProvider;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\ContextProvider\SourceContextProvider;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\HtmlDumper;使用欧宝娱乐app下载地址\组件\VarDumper\自动倾卸车\ServerDumper;美元切割=新VarCloner ();美元fallbackDumper= \ in_array (\ PHP_SAPI [“cli”,“phpdbg”])?新CliDumper ():新HtmlDumper ();美元自动倾卸车=新ServerDumper (“tcp: / / 127.0.0.1:9912”,美元fallbackDumper,(“cli”= >新CliContextProvider (),“源”= >新SourceContextProvider ()));VarDumper::setHandler (函数(美元var)使用(美元切割,美元自动倾卸车){美元自动倾卸车- >转储(美元切割- >cloneVar (美元var));});
请注意
第二个参数的ServerDumper是一个DataDumperInterface实例用作后备服务器什么时候遥不可及的。第三个参数是上下文提供者,它允许收集一些信息的上下文数据就是倾销。内置的上下文提供者:cli
,请求
和源
。
然后您可以使用以下命令启动一个服务器开箱即用的:
1 2
美元[好]。/供应商/ bin / var-dump-server服务器监听tcp: / / 127.0.0.1:9912
DebugBundle和树枝集成
DebugBundle允许更大的这个组件的集成到Symfony应用程序中。欧宝娱乐app下载地址
自生成(甚至调试)输出控制器或在您的应用程序可能会打破它的模型如发送HTTP标头或损坏你的视图、包配置dump ()
函数,变量是倾倒在web调试工具栏。
但如果不能显示工具栏,因为你如die ()
/退出()
/dd ()
或发生致命错误,然后转储写在常规的输出。
在一根树枝模板中,两个结构变量可供倾销。选择这两个主要是个人口味的问题,还是:
{%转储foo。酒吧%}
是去当原始模板输出不得修改:变量不是倾销内联,但是在web调试工具栏;- 相反,
{{转储(foo.bar)}}
转储内联,因此可能不适合你的用例(例如,你不应该使用它或在HTML属性<脚本>
标签)。
这种行为可以改变配置debug.dump_destination
选择。阅读更多关于这个和其他选项DebugBundle配置参考。
提示
如果倾销的内容是复杂的,可以考虑使用本地搜索框寻找特定的变量或值。首先,点击任何地方倾倒的内容,然后按Ctrl。+ F
或Cmd。+ F
让当地的搜索框出现。所有的公共支持快捷键来导航搜索结果(Ctrl。+ G
或Cmd。+ G
,F3
等)完成时,出版社Esc。
再次隐藏框。
在PHPUnit)中使用VarDumper组件测试套件中
VarDumper组件提供了一个特征可以帮助为PHPUnit)写一些你的测试。
这将给你提供两个新的断言:
- assertDumpEquals ()
- 验证变量的转储作为第二个参数匹配预期的转储作为第一个参数提供。
- assertDumpMatchesFormat ()
-
就像以前的方法,但是接受预期转储中占位符,根据
assertStringMatchesFormat ()
PHPUnit)提供的方法。
例子:
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
使用PHPUnit)\框架\TestCase;类ExampleTest扩展TestCase{使用\欧宝娱乐app下载地址\组件\VarDumper\测试\VarDumperTestTrait;公共函数testWithDumpEquals(){美元testedVar= (123年,“foo”];美元expectedDump=< < < EOTXT数组:2 [0 = > 123 1 = > " foo "] EOTXT;/ /如果第一个参数是一个字符串,它必须整个预期的转储美元这- >assertDumpEquals (美元expectedDump,美元testedVar);/ /如果第一个参数是一个字符串,assertDumpEquals()转储/ /第二个参数并比较的转储美元这- >assertDumpEquals (美元testedVar,美元testedVar);}}
4.1
通过的可能性non-string变量的第一个参数assertDumpEquals ()
是在Symfony 4.1中引入的。欧宝娱乐app下载地址
转储和输出示例
对于简单的变量,输出应该简单阅读。这里有一些例子显示第一个PHP中定义一个变量,那么它的转储表示:
1 2 3 4 5 6 7 8
美元var= (一个简单的字符串的= >“在5个元素的数组,“浮”= >1.0,“整数”= >1,“一个布尔”= >真正的,的一个空数组= > []];转储(美元var);
请注意
灰色箭头是一个切换按钮隐藏/显示嵌套结构的孩子。
1 2 3 4 5 6 7
美元var=“这是一个多行字符串。\ n”;美元var。=“徘徊在一个字符串显示其长度。\ n”;美元var。=“utf - 8编码的字符串的长度计算utf - 8字符。\ n”;美元var。=“Non-UTF-8字符串长度是计入八隅体大小。\ n”;美元var。=“因为这个\ xE9八隅体(\ \ xE9) \ n”;美元var。=“这个字符串不是utf - 8有效,因此,“b”前缀。\ n”;转储(美元var);
1 2 3 4 5 6 7 8 9
类PropertyExample{公共美元publicProperty=的“+”前缀表示公共属性”,;受保护的美元protectedProperty=' ' # '保护的”——“私营企业”。;私人美元privateProperty=“徘徊在一个属性显示提醒。”;}美元var=新PropertyExample ();转储(美元var);
请注意
“# 14”是内部对象句柄。它允许比较同一对象的两个连续转储。
1 2 3 4 5 6 7 8
类DynamicPropertyExample{公共美元declaredProperty=“这类定义中声明的属性”;}美元var=新DynamicPropertyExample ();美元var- >undeclaredProperty =运行时添加动态属性有”在他们的名字。;转储(美元var);
1 2 3 4 5 6 7
类ReferenceExample{公共美元信息=“循环和兄弟姐妹引用显示为“#号”。\nHovering them highlights all instances in the same dump.\n"< /span>;}美元var=新ReferenceExample ();美元var- >aCircularReference =美元var;转储(美元var);
1 2 3 4 5 6 7 8
美元var=新\ ErrorException (“对于一些对象,属性有特殊值\ n”。“最好的表示为常量,像\ n”。”下面的“严重性”。悬停显示值(“2”)。\ n”,0,E_WARNING);转储(美元var);
1 2 3 4 5 6 7 8
美元var= [];美元var(0]=1;美元var(1]= &美元var(0];美元var(1)+ =1;美元var(2]= [“硬引用(圆形或兄弟姐妹)”];美元var(3]= &美元var(2];美元var(3][]=“‘数量’倾倒使用前缀。”;转储(美元var);
1 2 3 4 5
美元var=新\ ArrayObject ();美元var[]=“一些资源和特殊的物品,例如当前”;美元var[]=“有时最好使用虚拟”来表示;美元var[]=”属性,描述他们的内部状态。”;转储(美元var);
1 2 3 4 5 6 7 8
美元var=新AcmeController (“当一个转储超过它的最大项目限制,\ n”。”或当遇到一些特殊的对象\ n”。“孩子们可以取代一个省略号和\ n”。”(可选),后跟一个数字表示\ n”。“许多已被移除;“9”在这种情况下。\ n”);转储(美元var);