2017-06-01 4 views
0

Je suis novice ZF3

j'avais fini mon formulaire de recherche et mettre en œuvre la suggestion de saisie semi-automatique utilisant zend framework 3, mais j'ai reçu un message d'erreur warning : in Invalid argument supplied for foreach() in \zendframework\zend-form\src\Form.php on line 773

alors je supprimer $form->prepare(); et erreur de message ne semble pas, mais une fois que le bouton est cliqué et vérifié le message d'erreur retour

mon addkelas.phtml

<?php 
$form->setAttribute('action',$this->url('kelasbimbingan',['action'=>'addkelas'])); 
$form->prepare(); 
echo $this->form()->openTag($form); 
?> 
<p>Type students names:</p> 
<div id="prefetch"> 
<?= $this->formElement($form->get('nama')); ?> 
</div> 
<br> 
<div> 
<?php 
    echo $this->formSubmit($form->get('submit'))."<br>"; 
    echo $this->form()->closeTag(); 
?> 
</div> 
<?php 
echo "<script language='javascript'> var country_list =".$data.";</script>"; 
$this->headScript() 
    ->appendFile('/js/typeahead.bundle.js', 'text/javascript') 
    ->appendFile('/js/bloodhound.js', 'text/javascript') 
    ->appendFile('/js/autocompletejavascript.js', 'text/javascript'); 
?> 

mon addkelasAction()

public function addkelasAction() 
    { 
     $form = new CarimahasiswaForm(); 

     $data = \Zend\Json\Json::encode($this->getMahasiswaData()); 

     if ($this->getRequest()->isPost()) { 
      //get data, fill in the form with POST data 
      // Fill in the form with POST data 
      $dataMahasiswa = $this->params()->fromPost(); 
      $form->setData($dataMahasiswa); 
      //validate form 
      // print_r($data); 
      if($form->isValid()){ 
       $dataMahasiswa = $form->getData(); 
       print_r($dataMahasiswa); 
      } 
     } 

     return new ViewModel(['form'=>$form,'data'=>$data]); 
    } 

et ma forme

<?php 

namespace Skripsiku\Form; 

use Zend\Form\Form; 
use Zend\Form\Fieldset; 
use Zend\InputFilter\InputFilter; 
use Zend\Form\Element; 


class CarimahasiswaForm extends Form 
{ 
    public function __construct() 
    { 
     parent::__construct('tambah-kelas'); 

     $this->getElements(); 

     $this->add([ 
      'name'=>'submit', 
      'type'=>'submit', 
      'attributes'=>[ 
       'value'=>'Cari Mahasiswa', 
       'id'=>'SaveButton', 
       'class'=>'btn btn-info btn-md', 
      ], 
     ]); 
    } 

    public function getElements() 
    { 
     $this->add([ 
      'name'=>'nama', 
      'type'=>'text', 
      'attributes'=>[ 
       'placeholder'=>'Ketik Nama Mahasiswa', 
       'class'=>'typeahead', 
      ], 
      'options'=>[ 
       'label'=>'Cari Mahasiswa :', 
      ] 
     ]); 

    } 

    private function addInputFilter() 
    { 
     // Create main input filter 
     $inputFilter = new InputFilter();   
     $this->setInputFilter($inputFilter); 

     $inputFilter->add([ 
       'name' => 'nama', 
       'required' => true, 
       'filters' => [ 
        ['name' => 'StringTrim'],      
        ['name' => 'StripTags'],      
       ], 
       'validators' => [ 
        [ 
         'name' => 'StringLength', 
         'options' => [ 
          'encoding' => 'UTF-8', 
          'min'  => 5, 
          'max'  => 255, 
         ], 
        ], 
       ], 
      ]);  
    } 
} 

?> 

s'il vous plaît .. suggèrent Désolé pour mon mauvais anglais .. Merci

+0

oh .. j'ai oublié, ne redeclare fonction getElements – edrianhadinata

Répondre

1

Zend Form étend Fieldset qui declares a getElements function

public function getElements() 
{ 
    return $this->elements; 
} 

The line which throws the exception/error tente de boucle à travers une valeur récupérée à partir de:

$elements = $fieldset->getElements(); 

Vous pourriez penser que fieldset $ = $ dans le contexte donné, mais zend handles forms like fieldset:

$this->attachInputFilterDefaults($this->filter, $this); 

Solution: Don » t remplacer la fonction getElements, soitrenommer votre fonction actuelle ou ajouter ce morceau de code à votre constructeur.

+1

Merci @ Dymen1 Ça marche – edrianhadinata