2009-12-29 5 views
2

여러 폼 요소를 하나의 유효성 검사기에 결합하는 방법은 무엇입니까? 나는 구성 주소 정보를여러 요소를 하나의 유효성 검사기에 결합하는 방법은 무엇입니까?

  • 거리 주소
  • 우편 번호
  • 내가 streetValidator, 의해, ZipCodeValidator, postOfficeValidator로 각 유효성 검사기를 추가하면 내가 문제를 결국

우체국 : 어딘가에 (확인 ok), 어딘가에서 10101 (검증 ok도) 및 barOffice 어딘가에 (검증 ok도) foostreet 수 있습니다. 그러나 모든 주소 정보가 결합되어 "foostreet, 10101, barOffice"라는 주소가 없습니다.

<?php 
$f = new Zend_Form(); 

$street = new Zend_Form_Element_Text('street'); 
$f->addElement($street); 

$zip = new Zend_Form_Element_Text('zip'); 
$f->addElement($zip); 

$office = new Zend_Form_Element_Text('office'); 
$f->addElement($office); 

그러나 그것이 있어야 : : 이제

당신이

$f = new Zend_Form(); 
// All three fields are still seperated 
$address = new My_Address_Fields(); 
$address->addValidator(new addressValidator()); 
$f->addElement($address); 

유효성 검사기는

class addressValidator extends Zend_Validator_Abstract 
{ 
    public function isValid() 
    { 
    //$street = ???; 
    //$zip = ???; 
    //$office = ???; 

    // XMLRPC client which does the actual check 
    $v = new checkAddress($street, $zip, $office); 
    return (bool)$v->isValid(); 
    } 
} 
+0

문제를 일으키는 MyAddressField를 만드는 방법에 대한 부분이라고 생각합니다. 컴포지트를 레이어 화하여 복합 양식 요소를 만들어야합니다. 체크 아웃 [이] (http://weierophinney.net/matthew/archives/212-The-simplest-Zend_Form-decorator.html) [시리즈] (http://weierophinney.net/matthew/archives/213-From- How-to-layer-decorators.html) [기사] (http://weierophinney.net/matthew/archives/217-Creating-composite-elements.html#extended) [폼 데코레이터에서] (http://devzone.zend.com/article/3450). 특히'articles'으로 링크 된 것들은 그걸 가지고 있어야합니다. – Gordon

답변

1

같은 양식 요소를 검증, 유효성 검사기가 모든 주어입니다 양식 값, $context 매개 변수 내 아르 자형. 그래서, 당신의 유효성이 같은 것을 볼 수 있습니다, 그리고

public function isValid($value, $context = null) 
    { 
    $street = (isset($context['street']))? $context['street'] : null; 
    $zip = (isset($context['zip']))? $context['zip'] : null; 
    $office = (isset($context['office']))? $context['office'] : null; 

    // XMLRPC client which does the actual check 
    $v = new checkAddress($street, $zip, $office); 
    return (bool)$v->isValid(); 
    } 

당신의 street 요소에 유효성 검사기를 추가 말한다.

단점 :이 유효성 검사기는 특정 요소에 부착되었지만 실제로는 그렇지 않습니다.

장점 : 효과가 있습니다.

+0

주목해야 할'Zend_Validate_Abstract :: __ construct()'가 없으므로, 그 메소드를 매핑에 사용할 수 있습니다. 즉,'Your_Validate :: __ construct ($ mapping = array())''$ mapping [ 'streetElementId'] = 'street''과 같은 것이고, 결국'Your_Validate :: isValid()'메소드는 각 요소의 유효성을 검사하는 규칙을 알게됩니다. – chelmertz

관련 문제