在为Magento开发时,查看模型的内容通常会很有帮助。模型是一个非常复杂的对象,因此,当您要检查模型的内容时,通常不要’不想看到它的所有属性– all you’真正希望看到的是_data属性的内容,该属性是一个数组,其中包含已从数据库中检索到的所有属性/字段。
通常,在检查模型时,我’ve使用以下方法之一:
1 2 3 4 5 6 7 8 9 |
$模型 = 法师::getModel(“产品目录/产品”)->加载(1); #方法#1:这将转储模型的所有属性,包括_data属性。 #这会导致很多不必要的代码,这些代码我不需要看。 <a href="http://www.php.net/var_dump" 目标=“_空白” rel=“ noopener”>var_dump</a>($模型); #方法2:仅将数据记录在_data属性中。 问题是,如果_data属性包含 #任何其他模型,这些模型的所有属性都将被转储 <a href="http://www.php.net/var_dump" 目标=“_空白” rel=“ noopener”>var_dump</a>($模型->getData()); |
我最近遇到了->Varien_Object类中实现的dump()方法。此方法递归到模型的_data属性中,并返回_data属性中值的数组,包括子类的_data属性。这里’s the example code:
1 2 |
#方法#3 <a href="http://www.php.net/var_dump" 目标=“_空白” rel=“ noopener”>var_dump</a>($模型->调试()); |
注意:Varien_Object类是Magento中的许多类从中扩展的类。最值得注意的是,所有块和所有数据模型都扩展了Varien_Object。如果你’我从来没有看过Varien_Object类,’d建议通过该类中的方法进行扫描/读取。如果你’我懒得通读这些方法,但是想看看debug()方法的作用,我’ve包括在这篇文章的底部。
以下是三个屏幕截图,它们举例说明了不同方法之间的区别(注意:格式精美的var_dump输出是 调试器 php扩展名):
方法1:
方法1– var_dump
方法2:
方法2– getData
方法3:
方法3– 调试
万一你’很想看看debug()方法是如何工作的,在这里’来自Varien_Object类的代码:
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 |
/ ** *在调试模式下以字符串形式显示对象数据 * * @参数混合$ 数据 * @参数数组$ 对象 * @返回字符串 * / 上市 功能 调试($数据=空值, &安培;$对象=<a href="http://www.php.net/array" 目标=“_空白” rel=“ noopener”>数组</a>()) { 如果 (<a href="http://www.php.net/is_null" 目标=“_空白” rel=“ noopener”>一片空白</a>($数据)) { $杂凑 = <a href="http://www.php.net/spl_object_hash" 目标=“_空白” rel=“ noopener”>spl_object_hash</a>($这个); 如果 (!<a href="http://www.php.net/empty" 目标=“_空白” rel=“ noopener”>空的</a>($对象[$杂凑])) { 返回 '***回归***'; } $对象[$杂凑] = 真正; $数据 = $这个->getData(); } $调试 = <a href="http://www.php.net/array" 目标=“_空白” rel=“ noopener”>数组</a>(); 前言 ($数据 如 $键=>$值) { 如果 (<a href="http://www.php.net/is_scalar" 目标=“_空白” rel=“ noopener”>is_scalar</a>($值)) { $调试[$键] = $值; } elseif (<a href="http://www.php.net/is_array" 目标=“_空白” rel=“ noopener”>is_array</a>($值)) { $调试[$键] = $这个->调试($值, $对象); } elseif ($值 实例 Varien_Object) { $调试[$键.'('.<a href="http://www.php.net/get_class" 目标=“_空白” rel=“ noopener”>get_class</a>($值).')'] = $值->调试(空值, $对象); } } 返回 $调试; } |
我希望这个快速提示可以帮助您更有效地对模型进行编程!如有任何疑问,请随时在下面发表评论。