2014-02-28 2 views
0

beforeSave 함수를 디버깅하려고하지만 올바르게 수행하는 방법을 모릅니다. 디버그 레벨이 2로 설정되어 있더라도 var_dump 및 디버그 기능은 건너 뛰고 있습니다. 저장하려고하면 이벤트가 저장되었다는 사실을 사용자에게 알리지만 실제로는 저장하지 않습니다.cakePHP에서 beforeSave() 디버깅

public function beforeSave($options = array()){ 

    if($this->calculateWorkingHours($this->data[$this->alias])){ 
     return false; 
    }else{ 
     return true; 
    } 


} 

public function calculateWorkingHours($event){ 

sscanf($event['start_time'], '%d:%d:%d', $startHour, $startMin, $startSec); 
sscanf($event['finish_time'], '%d:%d:%d', $finishHour, $finishMin, $finishSec); 

    $pauseHour = $event['pause']['hour']; 
    $pauseMin = $event['pause']['min']; 

    $startInMinutes = ($startHour * 60 + $startMin); 
    $finishInMinutes = ($finishHour * 60 + $finishMin); 

    $totalPauseMinutes = ($pauseHour * 60 + $pauseMin); 

    $differenceInMinutes = $finishInMinutes - $startInMinutes; 
    $finalHours; 
    $finalMinutes; 

    if($differenceInMinutes > 0){//possitive minutes 
     if($totalPauseMinutes < $differenceInMinutes){ 
      if($event['paid']=='1'){ 
       $finalHours = floor($differenceInMinutes/60); 
       $finalMinutes = $differenceInMinutes - $finalHours * 60; 
      }else{//if breaks are not paid 
       $totalMinutes = $differenceInMinutes - $totalPauseMinutes; 
       $finalHours = floor($totalMinutes/60); 
       $finalMinutes = $totalMinutes - $finalHours * 60; 
      } 
      $event['hours'] = $finalHours; 
      $event['minutes'] = $finalMinutes; 
     } 
    }else{//negative minutes 
      $totalMinutesPreBreak = floor(((1440 - $startInMinutes)+ $finishInMinutes) + ((1440 - $startInMinutes) + $finishInMinutes))/2; 
      if($totalPauseMinutes < $totalMinutesPreBreak){ 
       if($event['paid']=='1'){//if breaks are paid 
        $finalHours = floor($totalMinutesPreBreak/60); 
        $finalMinutes = floor($totalMinutesPreBreak - $finalHours * 60); 
       }else{//if breaks are not paid 
        $totalMinutes = $totalMinutesPreBreak - $totalPauseMinutes; 
        $finalHours = floor($totalMinutes/60); 
        $finalMinutes = $totalMinutes - $finalHours * 60; 
       } 
      $event['hours'] = $finalHours; 
      $event['minutes'] = $finalMinutes; 
      }else{ 
        $finalHours = floor(((1440 - $startInMinutes) + $finishInMinutes)/60); 
        $finalMinutes = ((1440 - $startInMinutes) + $finishInMinutes) - $finalHours * 60; 
        $event['hours'] = $finalHours; 
        $event['minutes'] = $finalMinutes; 
      } 
    } 
     return true; 
} 

가능성이 잘못 여기에있을 수 또는 무엇을 디버깅하는 가장 좋은 방법 일 것입니다 무슨에 어떤 도움이나지도, 많이 감사합니다 : 여기

는 모델 '이벤트'에서 코드입니다.

+3

는'calculateWorkingHours'에만 ** **가 true를 반환한다. 이걸 눈치 챘나요? –

+0

이제 beforeSave() 콜백에서 true를 반환하지만 calculateWorkingHours()에서 아무 것도 반환하지 않는 한 아무 것도 저장되지 않습니다. calculateWorkingHours()에서 true를 반환하면 이벤트가 저장되지만 논리가 적용되지 않습니다. 여기서 뭐가 문제 야? – Domas

+0

질문을 새 코드로 업데이트 해 주실 수 있습니까? 이벤트'table'에서'hours'와'minutes' 필드를 업데이트해야합니까? –

답변

1

문제는 calculateWorkingHours 함수에서 항상 true를 반환하고 beforeSave() 콜백에서 false를 반환한다는 것입니다. 그것에 대해

변경 : beforeSave``의 조건이 항상 ** 거짓 ** 반환하기 때문에 그것은 방법 때문에, 절약 아니에요

public function beforeSave($options = array()) 
{ 
    $this->_calculateWorkingHours(); // <-- without parameters, you don't need 

    return true; 
} 

private public function _calculateWorkingHours() // <-- without parameters, you don't need 
{ 
    // all your code 
    // and set your data instance 
    $this->data[$this->alias]['hours'] = $finalHours; 
    $this->data[$this->alias]['minutes'] = $finalMinutes; 
    // don't return value this is a only format function 
} 
+0

이제 beforeSave() 콜백에서 true를 반환하지만 calculateWorkingHours()에서 아무 것도 반환하지 않는 한 아무 것도 저장되지 않습니다. calculateWorkingHours()에서 true를 반환하면 이벤트가 저장되지만 논리가 적용되지 않습니다. 여기에 무슨 문제가 있습니까? – Domas

+0

$ this-> data [$ this-> alias]가 아닌 $ events 변수의 값을 업데이트하기 때문에. 내 대답을 편집 해 봤어. –

관련 문제