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;
}
가능성이 잘못 여기에있을 수 또는 무엇을 디버깅하는 가장 좋은 방법 일 것입니다 무슨에 어떤 도움이나지도, 많이 감사합니다 : 여기
는 모델 '이벤트'에서 코드입니다.
는'calculateWorkingHours'에만 ** **가 true를 반환한다. 이걸 눈치 챘나요? –
이제 beforeSave() 콜백에서 true를 반환하지만 calculateWorkingHours()에서 아무 것도 반환하지 않는 한 아무 것도 저장되지 않습니다. calculateWorkingHours()에서 true를 반환하면 이벤트가 저장되지만 논리가 적용되지 않습니다. 여기서 뭐가 문제 야? – Domas
질문을 새 코드로 업데이트 해 주실 수 있습니까? 이벤트'table'에서'hours'와'minutes' 필드를 업데이트해야합니까? –