2016-08-31 1 views
1

ich ZF2 lerne und zu versuchen, ein Formular zu erstellen, aber wenn ich laufe die URL, die die Form Aktion ruft ich die folgende Meldung:Zend Framework 2 Form Fieldset Fehler

Zend\Form\Fieldset::add requires that $elementOrFieldset be an object implementing Zend\Form\ElementInterface; received "string" 

Mein Stack, wenn die folgenden:

# 0 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-form/src/Form.php(179): Zend \ Formular \ Fieldset-> add ('location', Array)

# 1/Benutzer/cesar/Dokumente/zf2course/module/Anwendung/src/Anwendung/Formular/Info. php (69): Zend \ Form \ Form-> hinzufügen ('Ort')

# 2 /Users/cesar/Documents/zf2course/module/Application/src/Application/Controller/IndexController.php(25): Application \ Formular \ Info -> __ construct()

# 3 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-mvc/src/Controller/AbstractActionController.php(82): Application \ Controllers \ IndexController- > infoaction()

# 4 [interne Funktion]: Zend \ Mvc \ Regler \ AbstractActionController-> onDispatch (Object (Zend \ Mvc \ MvcEvent))

# 5/Benutzer/cesar/Dokumente/zf2course/Verkäufer/Zendfram ework/zend-Eventmanager/src/EventManager.php (490): call_user_func (Array, Object (Zend \ Mvc \ MvcEvent))

# 6/Users/cesar/Dokumente/zf2course/Verkäufer/ZendFramework/zend-Eventmanager /src/EventManager.php(263): Zend \ EventManager \ EventManager-> triggerListeners ('dispatch', Objekt (Zend \ Mvc \ MvcEvent), Objekt (Closure))

# 7/Benutzer/cesar/Dokumente/zf2course/Verkäufer/ZendFramework/zend-mvc/src/Controller/AbstractController.php (118): Zend \ Eventmanager \ EventManager-> triggerEventUntil (Object (Schließung), Objekt (Zend \ Mvc \ MvcEvent))

# 8 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-mvc/src/DispatchListener.php(118): Zend \ Mvc \ Controller \ Abstra ctController-> dispatch (Objekt (Zend \ Http \ PhPEnvironment \ Request))

# 9 [interne Funktion]: Zend \ Mvc \ DispatchListener-> onDispatch (Object (Zend \ Mvc \ MvcEvent))

# 10 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-eventmanager/src/EventManager.php(490): call_user_func (Array, Object (Zend \ Mvc \ MvcEvent))

# 11 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-eventmanager/src/EventManager.php(263): Zend \ EventManager \ EventManager-> triggerListeners ('Versand', Objekt (Zend \) Mvc \ MvcEvent), Objekt (Closure))

# 12 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-mvc/src/Application.php(340): Zend \ EventManager \ EventManager-> triggerEventUntil (Objekt (Closure), Objekt (Zend \ Mvc \ MvcEvent))

# 13/Benutzer/Cesar/Dokumente/zf2course/public/index.php (21): Zend \ Mvc \ Application-> run()

# 14 {main}

ich die Form-Klasse wie folgt zu erstellen:

<?php 
namespace Application\Form; 

use Zend\Form\Form; 
use Zend\Form\Element; 

class Info extends Form 
{ 
    public function __construct() 
    { 
     parent::__construct('info'); 

     $location = new Element('location'); 
     $location->setLabel('Location'); 
     $location->setAttribute(array(
      'type' => 'text', 
      'class' => 'form-control', 
    )); 

     $sizeW = new Element\Number('size_w'); 
     $sizeW->setLabel('Width Size'); 
     $sizeW->setAttributes(array(
       'min' => '0', 
       'max' => '500', 
       'step' => '0.1', 
       'class' => 'form-control' 
      )); 

     $sizeH = new Element\Number('size_h'); 
     $sizeH->setLabel('Height Size'); 
     $sizeH->setAttributes(array(
       'min' => '0', 
       'max' => '500', 
       'step' => '0.1', 
       'class' => 'form-control' 
      ));  

     $type = new Element\Select('plot_type'); 
     $type->setLabel('Plot Type'); 
     $type->setAttribute('class', 'form-control'); 
     $type->setValueOptions(array(
      1 => 'Balcony', 
      2 => 'Plot', 
    )); 

     $family = new Element\Number('family'); 
     $family->setLabel('Family Aggregate Number'); 
     $family->setAttributes(array(
       'min' => '0', 
       'max' => '10', 
       'step' => '1', 
       'class' => 'form-control' 
    )); 

     $diff = new Element\Select('diff'); 
     $diff->setLabel('Gardening Type'); 
     $diff->setAttribute('class', 'form-control'); 
     $diff->setValueOptions(array(
      1 => 'Begginner', 
      2 => 'Advanced', 
    )); 

     $submit = new Element\Submit('submit'); 
     $submit->setValue('Submit'); 
     $submit->setAttribute('class', 'btn btn-primary'); 

     $this->add('location'); 
     $this->add('size_w'); 
     $this->add('size_h'); 
     $this->add('plot_type'); 
     $this->add('family'); 
     $this->add('diff'); 
     $this->add('submit'); 
    } 
} 

Und ich rief die infocontroller mit der Form wie so:

... 
    public function infoAction() 
    { 
     $form = new Info(); 

     if ($this->request->isPost()) 
     { 
      $form->setData($this->request->getPost()); 
      // save stuff 

     } 

     return new ViewModel(array(
      'form' => $form, 
     )); 
    } 

Bin ich etwas fehlt oder habe ich brauchte diese fieldset Klasse zu erstellen und das ist, warum mir dieser Fehler es geben? Auch wenn jemand gute Zf2-Tutorials hat, die mir senden, wäre das sehr nett.

Antwort

1

Warum diese Zeilen mit String-Parameter:

$this->add('location'); 
    $this->add('size_w'); 
    $this->add('size_h'); 
    $this->add('plot_type'); 
    $this->add('family'); 
    $this->add('diff'); 
    $this->add('submit'); 

wie Sie alle Elemente nur definieren, bevor in Variablen? Versuchen Sie, sie durch diese Variablen zu ersetzen:

$this->add($location); 
    $this->add($sizeW); 
    $this->add($sizeH); 
    $this->add($type); 
    $this->add($family); 
    $this->add($diff); 
    $this->add($submit); 

Für Ihre Frage zu ZF2 Tutorial, das offical one gut ist, haben Sie es versucht?

+0

Raten Sie, ich habe das Tutorial falsch gelesen. Ich folgte auch diesem Tutorial, aber es wurde irgendwie verwirrt zu mir. Vielleicht ist ZF im Moment zu fortgeschritten für mich, aber ich versuche es. Das war der Trick und war in der Lage, das Formular zu arbeiten. Vielen Dank –