2012-03-07 9 views
1

質問はおそらくかなり奇妙に聞こえるでしょう。ここに問題があります:私はモデルFollowingStationLineとそれに対応するテーブルfollowing_station_linesを持っています。モデルでは、$this->save(array('field' => 'value));というレコードを保存しようとしています。対応するページにヒットすると、メソッドは無限ループで呼び出されているように見えます(保存文の前後にある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クラスには、モデルの 'save'関数によって呼び出される 'set'という関数があります。 'set'をオーバーライドすると、2つのメソッドの間でループが発生しています。

あなたの関数の名前を他の名前に変更すると、大丈夫です。

あなたはより多くの情報のためのAppModelソースを調べることができます。


UPDATE:

@マークは非常に良いコメントをしたことPHPの設定は、エラー報告モードE_STRICTが含まれている場合、不一致の署名でオーバーライドするとエラーが発生します。

詳細情報は、お使いのコンフィギュレーションを設定するには:http://php.net/manual/en/migrating5.errorrep.php

+0

ああ、私...、この上の数日間立ち往生されて非常にイライラ...この貴重なヒントをいただき、ありがとうございます。私がケーキの方法を無効にしていたことに気付かなかった。 – linkyndy

+1

@linkyndy疑問があるときは、ソースに行く! :) – Farray

+0

知っていますが、メソッドをオーバーライドする可能性がありませんでした。教訓: – linkyndy

関連する問題