2012-03-07 5 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 클래스에는 모델의 '저장'기능에 의해 호출되는 'set'이라는 함수가 있습니다. 'set'을 오버라이드하면 두 가지 메소드 사이에 루프가 생깁니다.

함수의 이름을 다른 것으로 변경하면 문제가 없습니다.

당신은 더 많은 정보를 위해 AppModel이 소스를 검사 할 수 있습니다 : https://github.com/cakephp/cakephp/blob/master/lib/Cake/Model/Model.php


UPDATE :

@ 마크는 아주 좋은 코멘트를 만든 당신의 PHP 구성이 오류보고 모드 E_STRICT를 포함하는 경우, 일치하지 않는 서명으로 대체 할 때 오류가 발생했을 것입니다.

자세한 정보는 구성을 설정하려면 다음 http://php.net/manual/en/migrating5.errorrep.php

+0

오 ...이에 며칠 갇혀 매우 실망 ...이 귀중한 힌트를 주셔서 감사합니다. 내가 케익의 방법을 무시하고 있다는 것을 몰랐다. – linkyndy

+1

@linkyndy 의심 스러울 때, 출처로 가십시오! :) – Farray

+0

알고 있지만 메서드를 재정의 할 가능성이 없습니다. 학습 한 내용 :) – linkyndy