2011-03-28 16 views
4

Zend_Form이 입력을 검증하는 방법에 대해 궁금합니다. 유효성을 검사 할 입력 필드를 어떻게 알 수 있습니까? PHP 전역 변수 ($ _ POST, $ _GET)를 살펴 보았고 유효성을 확인하기 위해 식별자로 설정된 것이 아무것도 없었습니다 (예 :). 아무도 나 에게이 물건에 대한 가이드를 제안 할 수 있습니까?젠드 폼 유효성 검사

+0

보통 당신은 –

+6

주어진 답변 중 하나를 수용하십시오 예를 들어 $ 형상 -> isValid() $ 형상 -> isValid ($ _ POST)에 값의 배열을 전달 왜 그들 중 누구도 당신의 질문에 대답하는 데 도움이되지 못했기 때문에 사람들은 대답을 업데이트 할 수있는 기회를 얻었습니다. 감사. – Gordon

답변

1

Zend_Form quickstart에서 Zend의 양식 처리 방법에 대한 매우 훌륭한 예입니다. 텍스트 입력을 검증

다음과 같습니다

$username = new Zend_Form_Element_Text('username'); 
// Passing a Zend_Validate_* object: 
$username->addValidator(new Zend_Validate_Alnum()); 
// Passing a validator name: 
$username->addValidator('alnum'); 
+0

사용 방법을 알고 있습니다. Zend가이 작업을 수행하는 방법을 이해할 수 없습니다. 양식을 제출할 때 유효성을 검사 할 입력 필드를 어떻게 알 수 있습니까? –

+1

@aykut 링크 된 자습서를주의 깊게 읽으십시오. 양식이 유효한지 확인하는 * 섹션이 있습니다. – fabrik

8

글쎄, 찾을 수있는 가장 좋은 옵션은 code of Zend_Form 보는 것입니다 :

한마디에 의미
/** 
* Validate the form 
* 
* @param array $data 
* @return boolean 
*/ 
public function isValid($data) 
{ 
    if (!is_array($data)) { 
     require_once 'Zend/Form/Exception.php'; 
     throw new Zend_Form_Exception(__METHOD__ . ' expects an array'); 
    } 
    $translator = $this->getTranslator(); 
    $valid  = true; 
    $eBelongTo = null; 

    if ($this->isArray()) { 
     $eBelongTo = $this->getElementsBelongTo(); 
     $data = $this->_dissolveArrayValue($data, $eBelongTo); 
    } 
    $context = $data; 
    foreach ($this->getElements() as $key => $element) { 
     if (null !== $translator && $this->hasTranslator() 
       && !$element->hasTranslator()) { 
      $element->setTranslator($translator); 
     } 
     $check = $data; 
     if (($belongsTo = $element->getBelongsTo()) !== $eBelongTo) { 
      $check = $this->_dissolveArrayValue($data, $belongsTo); 
     } 
     if (!isset($check[$key])) { 
      $valid = $element->isValid(null, $context) && $valid; 
     } else { 
      $valid = $element->isValid($check[$key], $context) && $valid; 
      $data = $this->_dissolveArrayUnsetKey($data, $belongsTo, $key); 
     } 
    } 
    foreach ($this->getSubForms() as $key => $form) { 
     if (null !== $translator && !$form->hasTranslator()) { 
      $form->setTranslator($translator); 
     } 
     if (isset($data[$key]) && !$form->isArray()) { 
      $valid = $form->isValid($data[$key]) && $valid; 
     } else { 
      $valid = $form->isValid($data) && $valid; 
     } 
    } 

    $this->_errorsExist = !$valid; 

    // If manually flagged as an error, return invalid status 
    if ($this->_errorsForced) { 
     return false; 
    } 

    return $valid; 
} 

, Zend_Form이 반복됩니다 양식에있는 모든 구성된 요소를 비교하고 전달 된 배열의 값과 비교하십시오. 일치하는 항목이 있으면 구성된 유효성 검사기에 대해 해당 값의 유효성을 검사합니다.

2

그래서 실행중인 양식을 작성한 다음 게시 | 데이터를 확인하십시오. 여기서 is_valid 양식을 확인할 수 있습니다. isValid() 함수에 $ _POST 또는 $ _GET 데이터를 전달해야합니다. 예 :

if ($request->isPost() && $form->isValid($request->getPost())) { 

isValid() 함수의 Zend_Form 클래스이다. Form은 각 요소에 대한 모든 유효성 검사를 실행합니다 (첫 번째 유효성 검사가 실패하면 중지하도록 설정하지 않은 경우). 그런 다음 하위 양식에도 적용됩니다.

0

또는 당신은 사용할 수 있습니다

$username_stringlength_validate = new Zend_Validate_StringLength(6, 20); 
    $username = new Zend_Form_Element_Text('username'); 
    $username->setLabel('Username: ') 
      ->addFilters(array('StringTrim', 'HtmlEntities')) 
      ->setAttrib('minlength', '6') 
      ->setAttrib('class', 'required') 
      ->removeDecorator('label') 
      ->removeDecorator('HtmlTag') 
      ->removeDecorator('DtDdWrapper') 
      ->setDecorators(array(array('ViewHelper'), array('Errors'))) 
      ->addValidator($username_stringlength_validate);