2010-01-13 5 views
2

J'utilise Zend_Form pour un formulaire de demande en utilisant ce code:Ajouter espace réservé HTML dans Zend_Form

class Form_ApplicationForm extends Zend_Form 
{ 
    public function init() 
    { 
     $this->setAction('/application/new') 
      ->setMethod('post') 
      ->setAttrib('id','application'); 

     $name = new Zend_Form_Element_Text('name'); 
     $name->setLabel('Your Name') 
      ->setRequired(TRUE) 
      ->addValidator('alpha', FALSE, array('allowWhiteSpace' => true)); 

     $email = new Zend_Form_Element_Text('email'); 
     $email->setLabel('Email Address') 
       ->setRequired(TRUE) 
       ->addValidator('EmailAddress'); 

     $this->addElements(array($name,$email)); 
    } 
} 

J'ajoute un fichier flash Uploader (SWFUpload) à cette forme qui a besoin d'un code HTML pour être en lieu de travail, l'extrait ressemble à ceci:

<div id="swfupload-control"> 
    <p>Upload upto 5 image files(jpg, png, gif), each having maximum size of 1MB(Use Ctrl/Shift to select multiple files)</p> 
    <input type="button" id="button" /> 
    <p id="queuestatus" ></p> 
    <ol id="log"></ol> 
</div> 

Quelle est la meilleure façon d'insérer cette sorte qu'il se trouve quelque part dans le <form> que je suis insérer dans mon contrôleur comme ceci:

public function newAction() 
{ 
    $form = new Form_ApplicationForm(); 
    if($this->_request->isPost()){ 
     $data = $_POST; 
     if($form->isValid($data)){ 
      /// handle data here 
     }else{ 
      $form->populate($data); 
     } 
    } 
    $this->view->form = $form; 
} 

Existe-t-il un moyen d'ajouter un espace réservé ou similaire au sein de Zend_Form, ou devrait-il être fait avec un décorateur ou quelque chose comme ça?

Merci.

Répondre

3

Vous devez écrire votre propre élément pour cela, par ex. My_Form_Element_SwfUpload avec un moteur de rendu. Voir ces tutoriels:

+0

cela ressemble à une bonne solution, devra en savoir plus à ce sujet – robjmills

+0

qui semble être la solution que je cherche, mais les exemples ne fournissent aucun contexte d'où les nouveaux fichiers doivent être placés. Y a-t-il un principe que je devrais suivre ici, c'est-à-dire un nouveau dossier dans le même répertoire que ZF lui-même? – robjmills

+0

Eh bien, les noms de classe suivent la convention de nommage PEAR, donc vous placeriez l'élément ci-dessus dans My/Form/Element/SwfUpload et un My_Decorator_Something irait dans My/Decorator/Quelque chose – Gordon

3

La façon la plus simple est de le faire dans la vue:

En echo ing chaque élément que vous pouvez imprimer le html. Voici une façon de le faire:

<form id="<?= $this->form->getId() ?>" action="<?= $this->form->getAction() ?>"> 

<? foreach ($this->form as $element): ?> 
<?= $element ?> 
<? if ($element->getName() == 'email'): ?> 
<div id="swfupload-control"> 
    <p>Upload upto 5 image files(jpg, png, gif), each having maximum size of 1MB(Use Ctrl/Shift to select multiple files)</p> 
    <input type="button" id="button" /> 
    <p id="queuestatus" ></p> 
    <ol id="log"></ol> 
</div> 
<? endif ?> 
<? endforeach ?> 

</form> 

Ce que cela fait est-il imprime tous les éléments, et met tout ce que vous devez après le champ email. Si vous ajoutez ou supprimez un champ du formulaire, ce code continuera à fonctionner (bien sûr, il échouera si vous supprimez le champ email).

+1

ce serait certainement travailler mais il se sent juste un peu hacky – robjmills

+1

D'accord. Il pourrait «se sentir» hacky, mais l'autre solution, avec la mise en œuvre d'un décorateur, est beaucoup, beaucoup plus de temps. –

+0

haha, je trouve certainement que :) – robjmills

Questions connexes