참고 : 대안을 찾았 기 때문에 더 이상이 작업을 시도하지 않고 있지만 답변을 알면 나중에 유용 할 수 있습니다.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);
}
}
}
내가 사용하고 있던 코드를 추가 할 수는 있지만 (삭제하지 않았다면) 이론적 인 질문이 더 많습니다. 나는 그것을 다시 작성하고 여기에 올리려고 노력할 것이다. 나는 기능 분리의 원칙을 따르기 위해 이것을하려고 노력했다. – devius
글쎄, 그건 당신이 검증을하기로되어있는 방식이 아닙니다. – metrobalderas
왜? 사용자 데이터는 세션 변수에 보관되므로 손실되지 않습니다. 이것은 기본 cakePHP 동작입니다. 나는 또한 오류를 포함하도록 확장하고 싶다. 그게 뭐 그리 좋지? – devius