2011-02-12 32 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"; 
}