2015-11-24 4 views
3

Je travaille sur Zend framework 2. J'ai un formulaire pour enregistrer les informations de la boutique. J'ai validé le formulaire en utilisant les filtres d'entrée de Zend. Mon problème est quand j'entre des données incorrectes dans le champ ou garde un champ obligatoire vide alors il affiche correctement l'erreur mais le formulaire entier se vide encore.Zend framework 2 - rendre les champs de formulaire collants quand il y a un formulaire de soumission d'erreur

Je veux les valeurs précédemment saisies telles qu'elles sont quand le formulaire montre des erreurs.

Voici la fonction qui rend le formulaire. J'ai utilisé $form->setInputFilter($shop->getInputFilter()); pour les validations. Un extrait de getInputFilter() est la suivante:

public function getInputFilter() 
    { 
     if (!$this->inputFilter) { 
      $inputFilter = new InputFilter(); 

      $inputFilter->add(array(
       'name' => 'id', 
       'required' => true, 
       'filters' => array(
        array('name' => 'Int'), 
       ), 
      )); 
      $inputFilter->add(array(
       'name' => 'ship_to_code', 
       'required' => false, 
       'filters' => array(
        array('name' => 'StripTags'), 
        array('name' => 'StringTrim'), 
       ), 
       'validators' => array(
        array(
         'name' => 'StringLength', 
         'options' => array(
          'encoding' => 'UTF-8', 
          'min' => 0, 
          'max' => 50, 
         ), 
        ), 
       ), 
      )); 
      $inputFilter->add(array(
       'name' => 'default_phone', 
       'required' => false, 
       'filters' => array(
        array('name' => 'StripTags'), 
        array('name' => 'StringTrim'), 
       ), 
       'validators' => array(
        array(
         'name' => 'StringLength', 
         'options' => array(
          'encoding' => 'UTF-8', 
          'min' => 0, 
          'max' => 50, 
         ), 
        ), 
       ), 
      )); 
      $inputFilter->add(array(
       'name' => 'max_records_per_file', 
       'required' => true, 
       'filters' => array(
        array('name' => 'Int'), 
       ), 
      )); 
    } 

Et la forme est

$this->add(array(
     'name' => 'id', 
     'type' => 'Hidden', 
    )); 
    $this->add(array(
     'name' => 'ship_to_code', 
     'type' => 'Text', 
     'options' => array(
      'label' => 'Ship-To Code', 
     ), 
    )); 
    $this->add(array(
     'name' => 'default_phone', 
     'type' => 'Text', 
     'options' => array(
      'label' => 'Default Phone', 
     ), 
    )); 
+0

Où vérifiez-vous les entrées obligatoires etc ... ?? – Random

+0

@Random J'ai mis à jour le post pour votre compréhension – Suyog

Répondre

1

Vous pouvez utiliser la méthode SetData() de forme dans votre action de réglage. Voici le code mis à jour

if ($shop) 
      { 
       // echo "<pre>";print_r($shop); 
       // $shop->selected_countries = unserialize($shop->selected_countries); 
       $form->bind($shop); 
       $form->setData($request->getPost()); // set post data to form 
      }