편집 또는 작성에서 Beforesave에 있는지 어떻게 알 수 있습니까? 케이크

StackOverflow https://stackoverflow.com/questions/1751476

문제

저장하기 전에 처리 해야하는 모델이 있지만 (또는 특정 경우에 편집 한 경우) 보통 편집 할 때는 그렇지 않습니다. 실제로, 대부분의 편집에서 처리를 수행하면 결과 필드가 잘못됩니다. 지금은 모델의 Beforesave 콜백에서 일하고 있습니다. 편집 또는 추가에서 왔는지 어떻게 알 수 있습니까?

프랭크 루크

도움이 되었습니까?

해결책

function beforeSave() {
  if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}

다른 팁

이것은 기본적으로 NeilCrookes의 답변과 동일합니다. empty() 테스트와 반대되는 것 !isset().

배열 키가 존재하지만 비어 있으면! Isset은 False를 반환하고 Empty는 True를 반환합니다.

코드를 건조시키기 위해 Add and Edit에 동일한보기 파일을 사용하고 싶습니다. 즉, 레코드를 추가 할 때 'ID'키는 여전히 설정되지만 아무것도 보유하지 않습니다. Cake는 NeilCrookes 버전의 코드가 데이터 배열에 설정되어 있기 때문에 코드의 NeilCrookes 버전이 추가로 인식하지 않는다는 것을 제외하고는이 정밀도를 처리합니다 (아무것도 보유하지 않더라도). 따라서 비워 지도록 변경하는 것은 해당 사례를 설명합니다.

function beforeSave() {
  if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top