发生异常时捕获变量

时间:2012-07-26 21:45:18

标签: php magento

我有这个错误:

[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吗?

2 个答案:

答案 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();
}