2013-04-09 3 views
1

양식 유효성 검사에 이상한 문제가 있습니다. 내 양식에 4 개의 입력이 있으며 모두 유효성이 검사됩니다.cakephp의 양식 유효성 확인 문제

전자 메일 입력 필드 인 마지막 입력 필드의 유효성을 검사 할 때까지 모든 것이 올바르게 작동합니다. 이메일 입력란에 두 가지 규칙, 'rule' => 'notEmpty', 'rule' => 'email'이 있습니다. 양식은 유효하지 않은 규칙 만 확인해야만 유효하지만 유효하지 않은 이메일이 발견되면 유효성을 검사하지만 유효한 이메일을 입력 한 후에도 게시하지 않습니다.
하나 :

는 여기에 몇 가지 시나리오입니다
모든 것이 잘 작동하는 모든 입력에 대한 사용자 입력 유효한 항목, 양식 게시물과 데이터가 데이터베이스에 추가됩니다.

2 : 사용자 입력 유효한 이메일 입력하지만, 모든 항목하지만 사용자 히트는 처음 세 개의 필드
모든 작업을위한 입력을 제공 한 후 제출한다고 가정하면 모든 입력

에서 유효한 이메일을 입력 첫 번째로 올바른 이메일 주소를 입력 한 후 양식 게시물과 데이터가 데이터베이스에 추가됩니다.

세 : 이메일 제외한 모든 사용자 입력이 유효한 항목 (잘못된 이메일 제공)
그것은 오류 메시지를 표시하지만, 심지어 유효한 이메일 주소를 제공 한 후에는 아무것도하지 않습니다. 제출 버튼을 계속 클릭하면 페이지가 동일한 데이터로 다시로드됩니다.

:

다음
class Member extends AppModel 
{ 
    public $validate = array(
     'id' => array(
      'rule' => 'notEmpty' 
      ), 
     'Student_First_Name' => array(
      'rule' => 'notEmpty' 
      ), 
     'Student_Last_Name' => array(
      'rule' => 'notEmpty' 
      ), 
     'Student_Email' => array(
      'emailRule-1' => array(
       'rule' => 'notEmpty', 
       'last' => false 
       ), 
      'emailRule-2' => array(
       'rule' => 'email', 
       'message' => 'Please enter a valid email address.' 
      )) 
     ); 

} 

이 컨트롤러입니다 : 제출 버튼이 초기 클릭 여기

후 다시 클릭하면
또한, 오류 메시지가 사라질 나의 모델입니다

class MembersController extends AppController { ... public function add() { if($this->request->is('post')) { $this->Member->create(); if($this->Member->save($this->request->data)) { $this->Session->setFlash('Member has been added!'); $this->redirect(array('action' => 'members')); } else { $this->Session->setFlash('Unable to add member.'); } } } } 

나는 그런 간단한/성가심 문제를위한 그런 긴 포스트를 사과하지만 내 응용 프로그램/웹 사이트에서 이와 같은 것들을 갖는 것이 싫다.

감사합니다.

+0

왜 'last'=> false'를 사용하고 있습니까? 나에게 아무런 의미가 없다. 아무도 이메일을 입력하지 않으면 올바른 형식의 이메일을 확인하지 않아도된다. – mark

+0

그래, 그 불필요한 것, 나는 문서를 검토하고 다른 것을 시도하고 있었다. – Archon

답변

0

귀하의 양식은 다른 형태의 게시물 : put 일 가능성이 큽니다.

빠른 설명입니다 :

POST is simulated by FormHelper for 'create' form, or any post form that isn't modifying an existing record. 

PUT is for updating existing records. 

는 "생성"으로 http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::create

귀하의 추가 조치 카운트를 참조하십시오.

By 케이크 코드는 실제로 POST (아래 주석 참조) 여야 함을 보여줍니다. 따라서 코드의 어딘가에서 헬퍼가 POST에서 PUT으로 변경되도록합니다. 어쩌면 당신은 틀에 얽매이지 않는 일들을하고있을 것입니다.

팁 :

if ($this->request->is('post') || $this->request->is('put')) {} 

모두 포스트 유형이 유효 확인 : 당신이 모두 확인, 안전을 위해합니다.

규칙에 충실하고 lower_case_underscored 필드 이름을 사용해보십시오. 마지막으로 "id"유효성 검사를 중단하십시오. 기본 키의 유효성을 검사하는 것은 의미가 없습니다.

+0

굉장! 그건 속임수 였어 .... 나는 정말 어리석은 롤을 느낀다. 그것에 시간을 보냈다. 프레임 워크와 웹 개발에 익숙하지 않은 나는 POST와 GET 요청에 익숙했다. 어쨌든, 정말 도움을 주셔서 감사합니다! – Archon

+0

올바르지 않습니다. 새 레코드를 만드는 것은 POST입니다. 레코드 편집은 PUT입니다. [매뉴얼] (http://book.cakephp.org/2.0/ko/core-libraries/helpers/form.html#FormHelper::create) 및 bake [template] (https : //)에 명시되어 있습니다. github.com/cakephp/cakephp/blob/master/lib/Cake/Console/Templates/default/actions/controller_actions.ctp#L54) 코드. – ADmad

+0

@Archon ID 필드에 notEmpty 유효성 검사가있는 이유는 무엇입니까? 새 레코드를 만들 때 그것은 비어있을 것입니다. – ADmad