2014-10-28 3 views
0

CakePHP의 양식에 이상한 문제가 있습니다. 양식에서 가져온 데이터를 Booking 모델에 저장하려고합니다. 일부 연락처 데이터, 메시지, 전화 번호 및 이메일 주소, 표준 항목. 데이터가 게시되고 난CakePHP : 존재하지 않는 필드에 대한 유효성 검사 오류 받기

$this->Booking->save ($this->request->data); 

를 통해 저장하려고하지만 저장하려고로,이 개 필드는 검증을 전달하고 저장 프로세스를 중지하지 않습니다 phone_buyercarsign을.

이상한 점은이 두 필드가 내가 저장하려고하는 양식의 일부가 아니라는 것입니다. 예상대로 그들은 $this->data에 표시되지 않습니다 :

$ this-> 요청 -> 데이터 :

array(
    'Booking' => array(
     'question' => 'Lieber Vermieter, 
ich würde gerne im angegebenen Zeitraum auf deinem Parkplatz parken. Ist das möglich? Ich freue mich auf deine Rückmeldung. 
Liebe Grüße', 
     'start_date' => '30.10.2014', 
     'end_date' => '30.10.2014', 
     'sellerid' => '294', 
     'buyerid' => '301', 
     'parkid' => '10468', 
     'status' => 'Angebot', 
     'answer' => 'Blserntesn7x6 u fcgt c c ', 
     'ppemail_seller' => '*email*', 
     'phone_seller' => '0532732123', 
     'acceptrules' => '1', 
     'acceptrules2' => '1', 
     'id' => '1012' 
    ) 
) 

... 그리고 그들은 내가 중, 제출하고 양식의 일부가 아닙니다. 그들은 페이지의 다른 형태조차도 가지고 있지 않습니다. 그러나 그들은 데이터베이스의 필드로 존재하고 모델에서 유효성 검사 규칙이 있습니까 :

Booking.php (모델) :

class Booking extends AppModel { 

public $validate = array(

     //(...) 
     'phone_seller' => array (
      'rule' => array ('notEmpty'), 
      'message' => 'Damit dich der Mieter kontaktieren kann, brauchst du eine Telefonnummer.' 
     ), 
     'ppemail_seller' => array (
      'rule' => array ('notEmpty'), 
      'message' => 'Um das Geld der Miete zu empfangen, benötigst du ein PayPal-Konto.' 
     ), 

     // These two are giving me headaches: 
     'carsign' => array( 
      'required' => array( 
       'rule' => array('notEmpty'), 
       'required' => false, 
       'message' => 'Du brauchst ein Autokennzeichen, um den Parkplatz zu buchen.' 
      ) 
     ), 
     'phone_buyer' => array( 
      'required' => array( 
       'rule' => array('notEmpty'), 
       'required' => false, 
       'message' => 'Damit dich der Vermieter kontaktieren kann, brauchst du eine Telefonnummer.' 
      ) 
     ) 

); 

}

그러나 설명서에 따라 내가 지금까지 읽은 notEmpty 규칙은 해당 필드가 제출 된 양식의 일부가 아닌 경우 아무 것도 수행하지 않아야합니다. 확실히 required=>false을 추가했지만 여전히 오류가 발생합니다. 도움을 주셔서 대단히 감사합니다. 미리 감사드립니다. :) 죄송합니다. 이해하기 어려운 것이 있으면 영어가 제 모국어가 아닙니다.

는 업데이트 : 제안

감사합니다, 나는 문제를 발견했다. 나는 아래 답변에 그것을 썼다.

+0

그래서 어디서'phone_buyer'와'carsign'을 설정합니까? 컨트롤러 작업에서 설정하고 무엇인가 잘못되었을 때 저장을 중지하고 싶습니다. – gmponos

+0

'phone_buyer'와'carsign'는 다른 액션에서 설정되고이 컨트롤러 액션이나 뷰에는 나타나지 않습니다. 모델이 값이없는 필드를 저장하려고하므로 저장에 실패합니다. –

답변

0

이 문제점을 발견했습니다.

저장 전에 일부 코드에서 $this->Booking->read();을 사용하여 데이터베이스의 내용을 가져 오는 것이 문제였습니다. 그 함수가 모델의 데이터를 덮어 쓰기 때문에 (내가 배운 here), 저장하려고하는 데이터는 손실되고 데이터베이스의 내용으로 대체됩니다 (이러한 특정 필드가 누락 된 경우). 나는 $this->Booking->findById($id);으로 함수를 대체하고 모든 것이 잘 동작했다.

0

'allowEmpty' 키를 사용해 보셨습니까?

'phone_buyer' => array( 
    'required' => false, 
    'allowEmpty' => false, 
    'message' => 'Damit dich der Vermieter...' 
) 
+0

그랬지만이 문제를 해결하는 동안 빈 필드가 허용되지 않는 문제가 발생했습니다.이 필드는 다른 페이지에서는 필수 항목입니다. –

+0

다른 규칙은 작동해도 똑같지 않습니까? – NDM

+0

다른 규칙은 필드를 'notEmpty'로 설정합니다. 이는'allowEmpty'가 단지 그것을 수행하는 반면, 필드가 비어 있으면 필드가 받아 들여지지 않음을 의미합니다. –