Nasıl bir onaylayıcısına birden öğeleri birleştirebilir?

1 Cevap php

Nasıl bir onaylayıcısına birden fazla form öğeleri birleştirebilirsiniz? I oluşur adres bilgileri adres

  • Sokak adresi
  • Posta kodu
  • Postane

, Bir yerde (doğrulama ok) Orada foostreet olabilir (çok ok doğrulama) yere içinde 10101 yere (doğrulama Tamam da) ve barOffice: ben streetValkimlikator, zipCodeValkimlikator, postOfficeValkimlikator olarak bunların her biri için doğrulayıcı eklerseniz ben sorunu ile sonuna kadar. Ama kombine tüm adres bilgileri, "foostreet, 10101, barOffice" hiçbir adres yok.

Şimdi var:

<?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);

Ama bu olmalıdır:

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

Valkimlikator gibi bir şeydir

class addressValkimlikator extends Zend_Valkimlikator_Abstract
{
  public function isValkimlik()
  {
    //$street = ???;
    //$zip = ???;
    //$office = ???;

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

1 Cevap

Form eleman doğrulanması zaman, onaylayıcı $context parametre içinde, all form values verilir. Yani, onaylayıcı bu gibi görünebilir:

  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();
  }

Ardından, street elemanına onaylayıcıyı eklemek demek.

Cons: bu validator biraz bedensiz, ama gerçekten belirli bir elemana bağlı.

Pros: it'll work.