以干净的方式查看变量内容
Posted
技术标签:
【中文标题】以干净的方式查看变量内容【英文标题】:Viewing the variable content in a clean way 【发布时间】:2012-11-01 18:38:34 【问题描述】:所以我用来查看变量内容的方式是在我的模板工具包中使用 Data::Dumper:
[% 使用自卸车 %] [% Dumper.dump(varname) %]但我得到的结果有点乱——所有关于表关系、列类型和属性等的信息。
我想知道是否有办法获得“干净”的变量内容 - 仅在查询的当前结果+相关结果集(即,当我将 php 与 cakephp 框架一起使用时,有一个 'debug(varname )' 命令提供了这样的结果,看起来像这样http://pastebin.com/Hut0LnAb)。
【问题讨论】:
您是否将输出插入 html 而不将其转换为 HTML? TT没有过滤器可以转义为HTML吗?然后将其包装在 PRE 标签中。请记住,TT 和 Data::Dumper 都与 HTML 无关。 您所说的是格式化,但不幸的是,这不是我所要求的。比方说,我需要获取变量的过滤内容 - 没有所有列类型数据和所有其他内容 - 只有查询内容(如我的 php 示例中) 请显示您获得的输出的屏幕截图。我不完全理解这个问题。 据我了解,它与转储 ORM 对象(如 DBIC 对象)有关。 也许Stringification section of DBIC's cookbook 可以帮助... 【参考方案1】:Data::Printer 来救援! 它的对象转储更易于阅读:
my $obj = SomeClass->new;
p($obj);
# produces:
\ SomeClass
Parents Moose::Object
Linear @ISA SomeClass, Moose::Object
public methods (3) : bar, foo, meta
private methods (0)
internals:
_something => 42,
与模板工具包兼容:
[% USE DataPrinter %]
html-formatted, colored dump of the same data structure:
[% DataPrinter.dump_html( myvar ) %]
它也“知道”如何处理 DBIx::Class:
use Data::Printer
filters =>
-external => [qw[DB]], # use DB filter
, class =>
expand => 2, # traverse object 2-levels deep
linear_isa => 0, # hide not-so-relevant information
;
...
my $obj = $schema
->resultset('AddressState')
->search(, prefetch => [qw[country]] )
->single;
p $obj;
【讨论】:
哇,这正是我想要的,它甚至还支持模板工具包。我已阅读 Data::Printer 配置部分,但找不到问题的答案 - 是否有可能在对象转储中获得相关的结果集? (即“消息”有许多“cmets”,所以当我转储对象“消息”时,它也会显示相关的 cmets) 你可以增加对象遍历的深度:use Data::Printer max_depth => 5
也许你应该启用join的预取?
对不起@kK-Storm,我的错!这是您导入 Data::Printer 的方式,它以您期望的方式遍历 ResultSet:use Data::Printer filters => -external => [qw[DB]], class => linear_isa => 0, expand => 2 ;
(仍然需要预取!)
@kK-Storm 回答已编辑 :) 但是,我不知道如何让 Data::Printer 停止显示特定的内部结构......【参考方案2】:
你可以使用
[% Dumper.dump_html(variable) %]
见: http://template-toolkit.org/docs/modules/Template/Plugin/Dumper.html
【讨论】:
以上是关于以干净的方式查看变量内容的主要内容,如果未能解决你的问题,请参考以下文章