2012-12-18 4 views
0

데이터를 저장하기 전에 유효성을 검사하는 양식을 작성하고 유효성 검사에 실패하면 저장 여부를 확인해야합니다.zend framework - 유효성 검사 후 저장 확인

실용 예 :

2 개 필드가있는 등록 양식이 - 사용자 이름과 is_manager가. 이름을 검증 할 필요는 없지만 is_manager는 Zend_Db_NoRecordExists를 사용하여 유효성을 검사해야합니다 (다른 사용자가 이미 is_manager = true를 가지고 있는지 확인하십시오). 다른 사용자가 이미 관리자 인 경우 관리자에게 덮어 쓰기를 확인하라는 메시지가 표시되어야합니다.

대상 DB 테이블은 users (name, username, is_manager)입니다.

어떤 아이디어라도 충분합니다! 고맙습니다!

+0

관리자를 덮어 쓸지 결정하는 숨겨진 필드는 어떻습니까? 다른 사용자가 관리자 인 경우 확인란을 선택 취소하고 숨겨진 입력을 true로 설정합니다. 다시 선택하면 덮어 씁니다. – undefined

+0

Zend_Form을 사용하여 해당 양식을 만드십니까 ?? Zend_Form_Validate를 사용하여 입력의 유효성을 검사합니까? 그래서 당신은 AJAX request ant를 실행하여 $ form-> isValid()를 요청하고 JSON에 의한 응답을 반환 할 수 있습니다. – tasmaniski

+0

@tasmaniski 네, zend_form zend validators를 사용합니다. 좀 더 자세히 묘사 해 줄 수 있습니까? 10 배! – maephisto

답변

1

누군가가 is_manager의 상태를 변경하면 해당 필드에 대해 AJAX 검사를 수행 할 수 있습니다. 나는이 예제에서 JQuery를 사용한다. Zend_Form_Element_Checkbox에

설정 :

$is_manager->setAttrib('onchange', 'checkValue(this)'); 

당신이 가진 것보다 JS : 인 IndexController ajaxAction (에서

<script language = "Javascript"> 
function checkValue(object){ 
    var is_manager = $(object).is(':checked') ? 1 : 0; 
    jQuery.ajax({ 
     url: '/default/index/ajax', //modul/controller/action 
     type: 'POST', 
     data: {is_manager: is_manager}, 
     dataType: "json", 
     success: function(result){ 
      if(result.status != 'OK') 
       alert(result.message); 
     } 
    }); 
} 
</script> 

)의 요청을 얻고 JSON 응답을 보내야합니다 :

public function ajaxAction(){ 
    $this->view->layout()->disableLayout(); 
    $this->_helper->viewRenderer->setNoRender(true); 

    $is_manager = $this->_getParam('is_manager'); 

    // DO THE OTHER STUFF/validation AND LOGIC HERE 
    // ... 

    // OR set success message and status = OK 
    $results = array(
     'status' => 'error', 
     'message' => 'You will overwriting existing manager!' 
    ); 

    $this->_response->setBody(json_encode($results)); 
} 
1

하나 접근 - 자바 스크립트에 의존하지 않는 -은 두 가지 형태를가집니다 :

  1. 동일한 유효성 확인을 사용하여 기존 양식.
  2. 제출 버튼을 거의 포함하지 않는 덮어 쓰기 확인 양식. 첫 번째 항목에

    1. 를 표준 양식을로드 :

    흐름은 다음과 같이 될 것이다.

  3. 양식을 제출할 때 유효성 검사가 실패하면 유효성 검사 오류를 검사하십시오.

    2.1 유일한 유효성 검사 오류가 관리자 덮어 쓰기 인 경우 제출 된 정보를 세션에 숨기고 확인 양식이 표시된 작업으로 리디렉션합니다.

    2.2 그렇지 않은 경우 오류가있는 현재 양식을 다시 표시하십시오.

  4. 유효성 검사가 성공하면 정상적으로 기록을 작성하십시오.

  5. 확인 양식에 대한 작업에서 세션에 예상되는 데이터가 포함되어 있는지 확인하십시오. 제출시, 정상적으로 레코드를 쓰고 세션 데이터를 지우십시오. (@tasmaniski에 의해 제안) 클라이언트 측 스크립트를 이용한 방법으로 확실히 매끈 매끈하지

하지만, 적어도 더 자바 스크립트 의존도가 없다.아마도 최적의 조합은 위의 기본 흐름에 따라 양식을 디자인하는 것이지만 점진적인 향상으로 자바 스크립트를 작성하여 자바 스크립트를 사용할 수 없을 때 흐름이 정상적으로 저하되도록 할 수 있습니다.

관련 문제