2012-03-07 64 views
1

這個問題可能聽起來很奇怪,實際上也是如此。問題出在這裏:我有一個模型,FollowingStationLine及其相應的表,following_station_lines。在模型中,我試圖用$this->save(array('field' => 'value));保存一條記錄。當我點擊相應的頁面時,該方法似乎是在無限循環中調用(我在save語句之前和之後放置了一些debug()),並且僅在達到內存限制時才結束。我甚至用2GB的內存嘗試過,仍然是同樣的問題。CakePHP 2.1在保存記錄時進入無限循環

從另一個控制器調用方法時,也會發生這種情況,而不是FollowingStationLinesController。除此之外,其他所有型號/表格均按預期工作。我真的無法想象有什麼問題。下面是代碼的控制器,分別爲模型:

控制器:

App::uses('AppController', 'Controller'); 

    class FollowingStationLinesController extends AppController { 

    public function admin_set() { 
     $this->FollowingStationLine->set(array(1)); 
    } 

} 

型號:

App::uses('AppModel', 'Model'); 

class FollowingStationLine extends AppModel { 
    public function set($lineIds = array()){ 
     if(!is_array($lineIds)){ 
      return false; 
     } 
     $save = array(); 
     $save[] = array('station_id' => 45); 
     debug($save[0]); 
     $this->save($save[0]); 
    } 
    } 

任何幫助,將不勝感激!

回答

4

CakePHP的AppModel類有一個稱爲'set'的函數,該函數由模型的'save'函數調用。通過重寫'set',你正在導致這兩種方法之間的循環。

將你的函數重命名爲別的東西,你應該沒問題。

您可以檢查AppModel源的詳細信息:


UPDATE:

@馬克取得了很好的意見,如果你的PHP配置包括錯誤報告模式E_STRICT,您會因爲簽名不匹配而接收到錯誤。

更多信息設置你的配置:http://php.net/manual/en/migrating5.errorrep.php

+0

哦,我......很沮喪,一直停留在爲這幾天的......謝謝你這個寶貴的線索。沒有意識到我重寫了Cake的方法。 – linkyndy 2012-03-07 17:21:21

+1

@linkyndy如有疑問,請轉到源文件! :) – Farray 2012-03-07 17:22:39

+0

知道,但錯過了重寫方法的可能性。獲得的教訓:) – linkyndy 2012-03-07 17:24:00