Ошибка набора полей формы Zend Framework 2

Я изучаю ZF2 и пытаюсь создать форму, но всякий раз, когда я запускаю URL, который вызывает действие формы, я получаю следующее сообщение:

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

Мой стек, если следующее:

# 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 [внутренняя функция]: 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), Объект (Закрытие))

# 7 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-mvc/src/Controller/AbstractController.php(118): Zend \ EventManager \ EventManager-> triggerEventUntil (Объект (Закрытие), Объект (Zend \ Mc) MvcEvent))

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

# 9 [внутренняя функция]: 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), Объект (Закрытие))

# 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}

Я создаю класс Form следующим образом:

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

И я назвал инфоконтроллер с такой формой:

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

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

}

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

Я что-то упустил или мне нужно было создать этот класс fieldset, и поэтому он дает мне эту ошибку?
Также, если у кого-нибудь есть хорошие учебники по zf2, которые будут присланы мне, это было бы очень приятно.

1

Решение

Почему эти строки со строковыми параметрами:

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

как вы просто определяете все элементы ранее в переменных? Попробуйте заменить их этими переменными:

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

На ваш вопрос о ZF2 Tutorial, официальный хороший, ты пробовал?

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]