2016-06-08 8 views
0

J'essaie de déterminer comment effectuer une validation sur des champs de formulaire où les noms de champs sont dans un tableau. Les noms de champs que je rencontrais des problèmes avec sont dans ce format: item[1][urgent] Les champs sous forme viennent est à travers et ici le format des données juste avant qu'il est soumis à la validation:Validation de formulaire Zend 2 - Noms de champs matrices

'idNumber' => string '' (length=0) 
    'phone' => string '' (length=0) 
    'campus' => string '10427' (length=5) 
    'item' => 
    array (size=1) 
     1 => 
     array (size=6) 
      'ILLType' => string 'book' (length=4) 
      'requiredBy' => string '' (length=0) 
      'urgent' => string '0' (length=1) 
      'citation' => string '' (length=0) 
      'getFrom' => string '' (length=0) 
      'copyright' => string '0' (length=1) 
    'captcha' => 
    array (size=2) 
     'id' => string 'f0b53b625adad9371eafb7ee0b2e171b' (length=32) 
     'input' => string '' (length=0) 
    'submit' => string 'Submit ILL' (length=10) 

Je n'ai pas des problèmes avec les champs de formulaire dans la base (c'est-à-dire idNumber, campus) mais j'ai des difficultés à obtenir la validation dans la matrice 'item'. Existe-t-il un bon moyen de valider la façon dont je l'ai fait? Voici le code correspondant:

Forme:

$idNumber = new Element\Text('idNumber'); 
$idNumber->setLabel('* Your Deakin Library Borrower Number') 
          ->setLabelAttributes(array('class' => 'sq-form-question-title')) 
          ->setAttribute('summary', '(14 digit barcode number at the bottom of student/staff ID):') 
          ->setAttribute('class', 'sq-form-field required') 
          ->setAttribute('id', 'idNumber'); 



$ILLType = new Element\Select('item[1][ILLType]'); 
$ILLType->setLabel('* What is your request about?') 
       ->setLabelAttributes(array('class' => 'sq-form-question-title')) 
       ->setAttribute('class', 'sq-form-field required request_type') 
       ->setAttribute('id', 'ILLType_1') 
       //->setAttribute('multiple', 'multiple') 
       ->setOptions($ILLTypes); 



$urgent = new Element\Checkbox('item[1][urgent]'); 
$urgent->setLabel('Urgently required?') 
     ->setLabelAttributes(array('class' => 'sq-form-question-title')) 
     ->setAttribute('class', 'sq-form-field') 
     ->setAttribute('id', 'urgent_1'); 

Formulaire Filtre:

$idNumber = new Input('idNumber'); 
$idNumber->getValidatorChain() 
     ->addByName('NotEmpty');     


$ILLType = new Input('item[1][ILLType]'); 
$ILLType->getValidatorChain() 
     ->addByName('InArray', array('haystack' => array_keys(
            $ILLTypes['options'] 
           ))); 
$ILLType->getFilterChain() 
     ->attach(new Filter\StringToLower()) 
     ->attachByName('StripTags'); 

PostController:

 $this->ILLForm->prepareElements($this->ILLCategories, $this->campuses, $this->getFromOptions); 
     // Assign POST data to form 
     $this->ILLForm->setData($data); 

     $this->ILLFormFilter->prepareFilters($this->ILLCategories, $this->campuses, $this->getFromOptions); 
     $this->ILLForm->setInputFilter($this->ILLFormFilter); 

     if (!$this->ILLForm->isValid($data)) { 

      $this->flashMessenger()->addMessage('Please ensure you have filled in all the required fields'); 
     } 

Répondre

1

Il y a une Zend\Form\Element\Collection classe spéciale pour les éléments du tableau.

Vérifier la documentation complète de ZF2 sur cette classe le chapitre Collection

+0

C'est ce que je cherchais! Merci – adamst85