2010-12-28 8 views
0

참고 : 대안을 찾았 기 때문에 더 이상이 작업을 시도하지 않고 있지만 답변을 알면 나중에 유용 할 수 있습니다.CakePHP 유효성 검사 오류 메시지 - 어떻게 전달합니까?

컨트롤러의 index() 작업과 관련된보기 (index.ctp)에 양식이 있습니다. 이 양식은 같은 컨트롤러에서 다른 작업 인 contact()에 데이터를 게시해야합니다. 이 두 번째 작업에는보기가 없으며 정보를 처리하고 결과에 따라 사용자를 리디렉션하는 것입니다. 이 작업은 유효성 검사를 수행하고 오류가 발생하면 사용자를 리퍼러 (이 경우 인덱스)로 리디렉션 한 다음 오류를 인덱스에 표시해야합니다. 모델은 데이터베이스 테이블을 사용하지 않지만 유효성 검사 규칙을 정의하는 데에만 사용됩니다.

유효성 검사가 올바르게 수행되고 예상되는 오류를보고합니다. 리디렉션 후에 오류를 검색하기 위해 $ this-> ModelName-> invalidFields() 배열을 리디렉션 후에 index() 액션에서 검색 한 세션 변수에 씁니다. 이 배열은 뷰에 대한 $ errors 변수로 전달됩니다. 이제 문제가 온다. 리디렉션간에 올바르게 전달되지만 오류는 해당 양식에 첨부되지 않습니다. 이것을 어떻게 할 수 있습니까? 양식은 모든 기존 이름을 가지므로 자동이어야하지만 그렇지 않습니다.

인덱스보기 :

echo $this->Form->create('Contact', array('url' => '/contacts/contact')); 
echo (rest of form) ... 
echo $this->Form->end(__('send message', true)); 

연락처 컨트롤러 :

function index() { 

    if ($this->Session->check('Contact.errors')) { 
     $this->set('errors', $this->Session->read('Contact.errors')); 
    } 
} 

function contact() { 

    if (!empty($this->data)) { 
     $this->Contact->set($this->data); 

     if ($this->Contact->validates()) { 
      (send the email) 
     } 
     else { 
      $this->Session->write('Contact.errors', $this->Contact->invalidFields()); 
      $this->redirect($this->referer); 
     } 
    } 
} 

답변

0

내가 그것을에서 유효성 검사 오류를 작성하는 것이 좋습니다 생각하지 않는다

다음은 관련 코드의 일부 세션 변수 나는 CakePHP 전문가가 아니지만, 그렇게 생각하지는 않습니다. 모든 양식은 현재있는 URL을 가리켜 야하므로 사용자가 입력 한 데이터는 손실되지 않습니다.

질문에 코드를 추가 할 수 있습니까?

+0

내가 사용하고 있던 코드를 추가 할 수는 있지만 (삭제하지 않았다면) 이론적 인 질문이 더 많습니다. 나는 그것을 다시 작성하고 여기에 올리려고 노력할 것이다. 나는 기능 분리의 원칙을 따르기 위해 이것을하려고 노력했다. – devius

+0

글쎄, 그건 당신이 검증을하기로되어있는 방식이 아닙니다. – metrobalderas

+0

왜? 사용자 데이터는 세션 변수에 보관되므로 손실되지 않습니다. 이것은 기본 cakePHP 동작입니다. 나는 또한 오류를 포함하도록 확장하고 싶다. 그게 뭐 그리 좋지? – devius

관련 문제