我有这个错误:
[Wed Jul 25 15:48:09 2012] [错误] [client 50.xxx.xxx.xxx] PHP致命错误:在/ var / www /中的非对象上调用成员函数getSource() magento / app / code / core / Mage / Catalog / Model / Product.php 1389行
在此功能中:
/**
* Get attribute text by its code
*
* @param $attributeCode Code of the attribute
* @return string
*/
public function getAttributeText($attributeCode)
{
return $this->getResource()
->getAttribute($attributeCode)
->getSource()
->getOptionText($this->getData($attributeCode));
}
我想在发生错误时记录$ attributeCode值。所以我把功能更改为:
public function getAttributeText($attributeCode)
{
try {
return $this->getResource()
->getAttribute($attributeCode)
->getSource()
->getOptionText($this->getData($attributeCode));
} catch (Exception $e) {
Mage::log($attributeCode);
throw($e);
}
}
...并重新启动Apache,但server.log中没有显示任何内容。如果我注释掉throw($ e),异常仍会被抛出。
./ lib / Zend / Rest / Server.php有set_exception_handler(array($ this,“fault”));
但请告诉我,一旦你设置了某个地方,php不会忽略所有手动异常处理。因为那会很疯狂。
知道如何在异常发生时捕获$ attributeCode吗?
答案 0 :(得分:1)
尝试
$attributes = $this->getResource()->getAttribute($attributeCode);
if (!empty($attributes)) {
return $attributes->getSource()->getOptionText($this->getData($attributeCode));
} else {
Mage::log($attributeCode);
throw new InvalidArgumentException('bla bla');
}
//我不知道getAttribute($ attributeCode)返回了什么;因此,您可以使用is_null(),isset()
而不是empty()答案 1 :(得分:0)
仅出于调试目的,我会这样做:
if (!is_object($this->getResource()->getAttribute($attributeCode)) {
var_dump($attributeCode);
exit();
}