Zend Framework 2 Form Fieldset Error

I'm learning ZF2 and trying to create a form but whenever i run the url that calls the form action i get the following message:

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

My stack if the following:

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

#1 /Users/cesar/Documents/zf2course/module/Application/src/Application/Form/Info.php(69): Zend\Form\Form->add('location')

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

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

#4 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))

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

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

#7 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php(118): Zend\EventManager\EventManager->triggerEventUntil(Object(Closure), Object(Zend\Mvc\MvcEvent))

#8 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-mvc/src/DispatchListener.php(118): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))

#9 [internal function]: 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('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))

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

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

#14 {main}

I create the Form class like this:

<?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');
    }
}

And I called the infocontroller with the form like so:

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

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

        }

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

Am I missing something or did I needed to create this fieldset class and that's why it's giving me this error? Also if anyone has some good zf2 tutorials to send me that would be very nice.

Answers


Why these lines with string parameters:

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

as you just define all the elements before in variables? Try to replace them by these variables:

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

For your question about ZF2 Tutorial, the offical one is a good one, did you tried it ?


Need Your Help

PHP preg_split()

php preg-split

I am trying to use preg_split as below:

HTML5 - best way to render an elliptic arc

html5 math canvas drawing

I'm using HTML 5 to render elliptic pie charts per section; using a path that starts from the centre, out to the edge, across it's arc and back to the centre which is then filled.