2016-08-31 4 views
1

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

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-> добавить ('местоположение', array)

# 1/Пользователи/cesar/Documents/zf2course/module/Приложение/src/Приложение/Форма/Информация. php (69): Zend \ Form \ Form-> add ('location')

# 2 /Users/cesar/Documents/zf2course/module/Application/src/Application/Controller/IndexController.php(25): Application \ Form \ Info -> __ конструкт()

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

# 4 [внутренняя функция]: Zend \ Mvc \ контроллер \ AbstractActionController-> onDispatch (Объект (Зенд \ Mvc \ MvcEvent))

# 5/Пользователи/Cesar/Документы/zf2course/продавец/zendfram Ework/Зенд-EventManager/SRC/EventManager.php (490): call_user_func (Array, Object (Zend \ Mvc \ MvcEvent))

# 6/Пользователи/Сезар/Документы/zf2course/продавец/ZendFramework/Зенд-EventManager /src/EventManager.php(263): Zend \ EventManager \ EventManager-> triggerListeners ('dispatch', Object (Zend \ Mvc \ MvcEvent), Object (Закрытие))

# 7/Пользователи/cesar/Documents/zf2course/продавец/ZendFramework/Зенд-MVC/SRC/контроллер/AbstractController.php (118): Zend \ EventManager \ EventManager-> triggerEventUntil (Объект (Закрытие), объект (Зенд \ Mvc \ MvcEvent))

# 8 /Users/cesar/Documents/zf2course/vendor/zendframework/zend-mvc/src/DispatchListener.php(118): Zend \ Mvc \ Controller \ Abstra ctController-> dispatch (Object (Zend \ Http \ PhpEnvironment \ Request), Object (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 ('отправка', объект (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/Пользователи/Цезарь/Документы/zf2course/public/index.PHP (21): Zend \ Mvc \ Application-> бег()

# 14 {главная}

Я создаю класс формы, как это:

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

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

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

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

     } 

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

Am я что-то отсутствует, или же мне нужно было создать этот класс 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, то offical one хороший один, ты пробовал?

+0

Угадайте, я читал учебник неправильно. Я также следил за этим учебным пособием, но это меня немного смутило. Возможно, ZF слишком продвинута для меня в данный момент, но я пытаюсь. Это сделало трюк и смогло сделать форму работы. благодаря –