2011-02-12 53 views
1

我将现有的应用程序从CakePHP 1.2升级到1.3。模型的一个简化版本是这样的:多个belongsTo创建缓存错误

class Load extends AppModel { 

var $belongsTo = array(
    'OriginCity' => array(
    'className' => 'City', 
    'foreignKey' => 'origin_city_id', 
    'conditions' => '', 
    'fields' => '', 
    'order' => '', 
), 
    'DestinationCity' => array(
    'className' => 'City', 
    'foreignKey' => 'destination_city_id', 
    'conditions' => '', 
    'fields' => '', 
    'order' => '', 
    ) 
    ); 
} 

当我打开我的“负荷”模式的列表,它工作正常第一次,但在那之后,我得到:

Catchable fatal error: Object of class __PHP_Incomplete_Class could not be converted to string in /home/mike/Projects/myapp/cake/libs/debugger.php on line 554 

如果我手动删除缓存,它工作正常。

我开始一次删除app/tmp/cache/persistent中的文件,并且它在删除load.php文件后生效。如果我做php load.php它返回没有错误或任何东西(所以我认为它的工作原理)。

我的理论是它在第一次正常工作,但当Cake 1.3获得Load的缓存时,它会尝试查找对象名称OriginCityDestinationCity,当然这些对象都没有。

那么我可以用缓存来做些什么呢?或者有没有更好的方法让CakePHP 1.3指向两个不同的belongsTo指向相同的对象类型?

编辑:我改变缓存方法为APC,我仍然得到了同样的问题。所以我关闭了整个网站的缓存,并且工作。

回答

0

这是由于在5.2中不再可能打印物体例如 。 “print $ myObject”。相反,这将调用 __toString(),如果它不存在,则会导致代码死于 ,并带有可捕获的致命错误。

您可以通过添加一个__toString()到您的app_controller修复

public function __toString(){ 
    return "Needed to print an object"; 
}