0

当我加载产品页面时,它在系统日志文件中显示错误,如下所示..

2013-03-12T10:28:56+00:00 ERR (3): Recoverable Error: Method SM_Vendors_Model_Mysql4_Vendor_Collection::__toString() must return a string value  in C:\xampp\htdocs\magento\app\code\local\SM\Vendors\Block\Adminhtml\Catalog\Product\Render\Vendor.php on line 21

我的代码就像..

app\code\local\SM\Vendors\Block\Adminhtml\Catalog\Product\Render\vendor.php

class SM_Vendors_Block_Adminhtml_Catalog_Product_Render_Vendor extends Varien_Data_Form_Element_Abstract
{
 public function getElementHtml()
 {
 $vendorCollection = $this->getVendorCollection(); //line#21
 }

 public function getVendorCollection()
 {
  $collection = Mage::getResourceModel('smvendors/vendor_collection')->__toString();
  return $collection;
 }
}

app\code\local\SM\Vendors\Model\Mysql4\Vendor\Collection.php

class SM_Vendors_Model_Mysql4_Vendor_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract 
{
 public function _construct() 
 {
  parent::_construct();
  $this->_init('smvendors/vendor');
 }
 public function __toString()
 {
    return $this->_init('smvendors/vendor');
 }
}

我想解决magento系统日志文件中这种类型的错误显示。如果您知道,请回复。

4

2 回答 2

0

确保 $this->_init('smvendors/vendor'); 返回一个字符串。或在 __toString 中返回其他字符串:

public function __toString(){
    return $this->_init('smvendors/vendor');
}
于 2013-03-12T11:30:45.357 回答
0

您的代码中似乎对__toString()方法的使用不正确。
看来这里这个方法是用来获取集合的,而不是字符串。

public function getVendorCollection()
 {
  $collection = Mage::getResourceModel('smvendors/vendor_collection')->__toString();
  return $collection;
 }

这是不正确的,也是一个非常糟糕的主意。
你需要重构你的代码,否则你永远不会摆脱这个警告。

该怎么办

例如,您可以执行以下操作.. 将__toString方法重命名为getCollection并将使用的地方替换_toStringgetCollection.
替换直到日志中的消息不会消失。

在此处阅读有关您的问题的更多信息:http ://www.php.net/manual/en/language.oop5.magic.php#object.tostring

所以这里是固定代码:

class SM_Vendors_Model_Mysql4_Vendor_Collection extends Mage_Core_Model_Mysql4_Collection_Abstract 
{
 public function _construct() 
 {
  parent::_construct();
  $this->_init('smvendors/vendor');
 }
 public function getCollection()
 {
    return $this->_init('smvendors/vendor');
 }

 public function __toString()
 {
    return $this->_init('smvendors/vendor');
 }

}

还有二等...

class SM_Vendors_Block_Adminhtml_Catalog_Product_Render_Vendor extends Varien_Data_Form_Element_Abstract
{
 public function getElementHtml()
 {
 $vendorCollection = $this->getVendorCollection(); //line#21
 }

 public function getVendorCollection()
 {
  $collection = Mage::getResourceModel('smvendors/vendor_collection')->getCollection();
  return $collection;
 }
}
于 2013-03-12T11:31:12.080 回答