2013-02-23 4 views
0

한 번에 저장하는 사용자 레코드 목록이 있습니다 (양식이 업로드 된 CSV로 채워짐).CakePHP에서 saveAll로 인해 바리 데이션 오류가 발생했습니다.

모든 것이 잘 작동하고있는 것으로 보이며 유효성 검사 규칙이 적용되고 있지만 그 중 하나가 특정 오류 메시지입니다.

일반적인 유효성 검사 오류가 발생합니다 (예 : 고유해야하는 필드가 아닌 경우). 실제 필드에 사용자가 실제 문제가 무엇인지 알 수 있도록 오류가 표시되지 않습니다.

이것은 버그입니까? 아니면 내 코드에 문제가 있습니까? 여기 내 컨트롤러 (FWIW 내가 다른 작업에서이 작업에 CSV 데이터를 전달하고있어, 처음에 따라서 조각)에서 작업이다 : 고유의 필드 유효성 검사 규칙을 추가 할 경우

public function finalizeCsv() { 
    if (isset($this->request->params['named']['csvData'])) { 
     $csvData = unserialize($this->request->params['named']['csvData']); 
    } else { 
     $csvData = $this->request->data; 
    } 
    $this->set('users', $csvData); 
    if ($this->request->is('get')) { 
     $this->request->data = $csvData; 
    } 
    if ($this->request->is('post') || $this->request->is('put')) { 
     if ($this->User->saveAll($this->request->data)) { 
      $this->Session->setFlash('Users added!', 'default', array('class' => 'success')); 
      $this->redirect(array('action' => 'index')); 
     } else { 
      $this->Session->setFlash('There were errors with your data.'); 
     } 
    } 
} 
+0

'$ this-> 사용자 -> 시려면 ($ this-> 요청 -> 데이터) 때문에 내 데이터의는 오는 방법의' – Costa

+0

에 시려면()을 변경해보십시오, 나는 내에서 배열을 뽑아해야 그것. 나는 리팩토링 할 수 있지만 이것이 실제로 효과를 낼 것인가? 모든 것이 올바르게 저장되고 유효성이 확인됩니다. 특정 오류가 발생하지 않습니다. –

+0

리팩토링, 변경하지 않음. 내 전체 저장이 무효화되므로 유효성 검사 규칙이 적용되지만 특정 오류는 문제가되는 필드에 표시되지 않습니다. –

답변

1

'field_name' => array(
    'rule' => 'isUnique', 
    'required' => 'create' 
), 

다음 - 오류가 발생하면 $this->User->validationErrors을 검토해야합니다. 생성 된 각 레코드에 대해 내부에 많은 배열이 있습니다. 루프를 통해 오류를 수집하고 $ this-> Session-> setFlash()로 보냅니다.
트랜잭션을 지원하는 InnoDB 또는 다른 엔진을 사용하는 경우 $this->User->saveAll($this->request->data)을 트랜잭션으로 더 잘 래핑하는 것이 좋습니다. 오류시 롤백을 수행하고 다시 시도하십시오.

$ds = $this->User->getDataSource(); 
$ds->begin(); 
// > saving here < // 
$ds->commit(); //< on success 
$ds->rollback(); //< on error 
+0

InnoDB는 훌륭한 팁입니다. 당신이 정말로 질문을 읽을 지 모르겠습니다. 1) 함수 유효성 검사 규칙이 있습니다. 2) 일반 인증 플래시를 반환 할 수 있습니다. 3) 문제는 단일 레코드 만 저장할 때와 같이 필드 별 오류가 나타나지 않는다는 것입니다. –

+0

당신은 검증 규칙을 나열하지 않았기 때문에, 나는 당신이 빠졌을 수도 있다고 생각했습니다 ('rule'=> 'isUnique'). 승인. diag =) 1) 필드에 'isUnique'규칙이 있습니다. 2) 중복 항목을 저장하는 동안 PHP 오류 또는 DB 오류가 없습니다. 3) saveAll()에서 거짓을 얻습니다. 4) $ this-> User-> validationErrors는 비어 있습니다 (배열 형식은 save() 메서드가 생성하는 것과 다릅니다); 5) 이미 최소 1 팩의 사용자를 저장할 수 있었고 성공했습니다. 6) 디버그 모드가 켜져 있습니다. – Swayok

+0

위의 내용이 모두 해당되면 foreach() 및 User-> create()를 사용하는 것이 좋습니다. 사용자 -> 저장 ($ oneRecord). 그들은 적어도 예상대로 작동합니다.) – Swayok

관련 문제