2010-09-30 4 views
0

Tout ce que je veux faire est de faire une forme, dans Zend Framework, qui ressemble à ceci:Zend_Form - Essayer de faire une forme simple et courte ... pourquoi je ne reçois pas ces décorateurs?

<p id="foo"> 
<form action="#" method="post"> 
<label>Start:</label> 
<input id="start" type="text" name="start" /> 
<label>End:</label> 
<input id="end" type="text" name="end" /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 
</p> 

et je ne peux tout simplement pas le faire. :(Je peux coller dans la vue comme ça, mais je ne reçois pas la validation et le filtrage.

Tous les conseils sur la façon de comprendre et de décorateurs Zend_Form?

Répondre

1

Cela fonctionne. Je l'ai adapté à partir d'un formulaire que j'utilise donc je suis coincé dans quelques autres choses comme les ID que vous pouvez utiliser si vous le souhaitez. Utile pour voir comment tout cela se rassemble quand même:

Dans mon contrôleur:

private function _theForm() { 
$form = new Zend_Form; 
     $form->setAction('/controller/action') 
       ->setMethod('post') 
       ->addAttribs(array('id' => 'an_id_for_the_form')); 

     $form->addElement('text', 'start', array(
      'validators' => array(
       'NotEmpty' 
      ), 
      'label' => 'Start:', 
      'id' => 'someid', 
      'required' => true, 
      'decorators' => array(
       'ViewHelper', 
       'Errors', 
       'Label', 
      ), 
     )); 
     $form->addElement('text', 'end', array(
      'validators' => array(
       'NotEmpty' 
      ), 
      'label' => 'End:', 
      'id' => 'someotherid_if_you_like', 
      'required' => true, 
      'decorators' => array(
       'ViewHelper', 
       'Errors', 
       'Label', 
       ), 
     )); 
     $form->addElement('submit', 'submitSomething', array(
      'label' => 'Submit', 
      'decorators' => array(
       'ViewHelper', 
      ) 
      )); 

     $form->setDecorators(array(
      'FormElements', 
      array('HtmlTag', array('tag' => 'p', 'id' => 'foo')), 
      'Form', 
     )); 

     return $form; 
} 

Je puis appeler cela ailleurs dans mon contrôleur, comme:

$form = $this->_theForm(); 
$this->view->form = $form; 

Ensuite, vous pouvez l'utiliser dans votre voir comme:

<?php echo $this->form; ?> 
0

Voici un exemple de la façon dont je crée une Zend forme:

class Mobile_Form_Login extends Zend_Form 
{ 
    public function init() 
    { 
     $this->setName('authenticate'); 

     $nick = $this->createElement('text', 'nick'); 
     $nick->setRequired(true); 
     $nick->addValidators(array(
      new Zend_Validate_StringLength(3, 10), 
     )); 

     $pass = $this->createElement('password', 'password'); 
     $pass->setAttrib('size', 10); 
     $pass->setRequired(true); 
     $pass->addValidators(array(
      new Zend_Validate_StringLength(6, 128), 
     )); 

     $this->addElements(array($nick, $pass)); 
    } 
} 

Le plus tard, dans mon contrôleur

$form = new Mobile_Form_Login(); 
if (!$form->isValid($_POST)) { 
    // handle errors 
} 

// else render() 
+0

Oui mais sans décorateurs vous ne pouvez pas générer le code que j'ai utilisé dans ma question. Les décorateurs sont tout le problème, le reste de Zend Form je reçois. – Lothar

1

Si vous êtes à l'aise de travailler avec vue mais aussi besoin des fonctionnalités de validation et de filtrage, vous pouvez toujours utiliser Ze nd Formulaire.

class Default_Form_Search extends Zend_Form 
{ 
    public function init() 
    { 
    $start = new Zend_Form_Element_Text('start'); 
    $start->setRequired(true) 
     ->addValidator('Date', false, array('format' => 'YYYY-MM-dd')) 
     ->setDecorators(array(
     array('ViewHelper') 
    )); 

    $this->addElement($start); 

    // For end 
    } 
} 

Dans votre contrôleur:

$form = new Default_Form_Search; 
$form->setAction('/search'); 

if ($this->getRequest()->isPost()) 
{ 
    if ($form->isValid($this->getRequest()->getPost()) 
    { 
    // Search here 
    } 
    { 
    var_dump($form->getMessages(); 
    } 
} 

$this->view->form = $form; 

Alors à votre avis, vous formez simplement le code HTML comme est sortie, mais l'élément comme celui-ci:

<p id="foo"> 
<form action="<?php echo $this->form->getAction() ?>" method="post"> 
<label>Start:</label> 
<?php echo $this->form->start ?> 
<label>End:</label> 
<?php echo $this->form->end ?> 
<input type="submit" name="submit" value="Submit" /> 
</form> 
</p> 
+0

Ceci est une suggestion très utile. Je veux toujours "avoir" des décorateurs mais cela va résoudre mon problème. Thx, Lysender. – Lothar

+0

Vous pouvez jouer avec des décorateurs d'éléments. Essayez d'utiliser 'Label' + 'ViewHelper' uniquement pour les éléments. Comme: $ element-> setDecorators (array (array ('Label'), array ('ViewHelper'))); – Lysender

Questions connexes