Horde ha una serie di classi per la creazione di form in modo automatico. Ad esempio per creare un form con un campo dominio e uno password basta istanziare la classe Horde_Form e usare addVariable() per aggiungere i campi oppure, come ho fatto io, creare una sotto classe:

class AddDomain_Form extends Horde_Form {
 function AddDomain_Form(&$vars, $title = "", $edit = true) {
  parent::Horde_Form($vars, $title, "add_domain_form");
  $this->addVariable(_("Domain name"), "domain_name", "text", true, false, null,
                                            array("/^[a-zA-Z0-9\-\.]+$/", 70, 156));
  $this->addVariable(_("Postmaster password"), "postmaster_password", "password", true);
 }
}

L’ultimo parametro di addVariable() permette di specificare dei parametri sul tipo di campo, ad esempio nel caso di campo “text”, prende 3 valori: una regular expression per controllare la validità dei caratteri digitati, la dimensione del riquadro di immissione e la lunghezza massima del campo. Gli ultimi due valori sono semplicemente usati come parametro per la generazione del codice html. Nel mio caso il primo addVariable genera:

<input type="text" name="domain_name" size="70" value="" id="domain_name" maxlength="156" />

La cosa interessante di queste classi è appunto il fatto che si occupano di validare l’input. Ad esempio se viene definito un campo “int” e l’utente inserisce una lettera viene automaticamente segnalato un errore.
Quello che non viene fatto però è controllare la lunghezza del campo testo, cioè anche avendo definito maxlength=”156″ se un utente tenta di inserire del testo di lunghezza maggiore, non viene segnalato come errore e il form viene validato correttamente. Questo potrebbe portare a dei problemi di sicurezza se chi sviluppa assume che la validazione del form faccia il controllo. Per ovviare a questo ho scritto una patch che ho inviato al team di Horde. Per chi fosse interessato ad applicare subito la patch può essere scaricata qui.