2016-03-21 2 views
1

В ZF2, у меня FIELDSET который выглядит следующим образом:ZF2 гидрата объект из FIELDSET

class PhoneRegistrationFieldset extends Fieldset implements InputFilterProviderInterface 
{ 
    public function __construct() 
    { 
     parent::__construct('phoneRegistration'); 

     $this 
      ->setHydrator(new ClassMethods(false)) 
      ->setObject(new Phone()); 

     $this->add([ 
      'type' => 'Zend\Form\Element\Select', 
      'name' => 'phoneType', 
      'options' => [ 
       'value_options' => // array of values 
      ], 
     ]); 

     $this->add([ 
      'name' => 'areaCode', 
      'options' => [ 
       'label' => 'label' 
      ], 
     ]); 
     // other fields 
    } 
} 

форме:

class PhoneRegistrationForm extends Form 
{ 
    public function __construct() 
    { 
     parent::__construct(); 

     $this 
      ->setAttribute('method', 'post') 
      ->setHydrator(new ClassMethods(false)) 
      ->setInputFilter(new InputFilter()); 

     $this->add([ 
      'type' => 'Parties\Form\Fieldsets\PhoneRegistrationFieldset', 
     ]); 

     $this->add([ 
      'type' => 'Zend\Form\Element\Button', 
      'name' => 'submitPhoneButton', 
      'attributes' => [ 
       'type' => 'submit', 
     ]); 

    } 
} 

Я проверить форму в контроллере. Он проверяется, но объект Phone не подвергается гидратации во время проверки. Если I dump объект после проверки, все его свойства: NULL s.

Как я могу увлажнить объект, прикрепленный к набору полей?

ответ

0

EDIT: мое решение не работает в ZF3.

Accidentally нашел решение: мне нужно позвонить bind() метод на форме в контроллере, как:

$this->phoneRegistrationForm->bind(new Phone()); 

Это интересно, но вы можете бросить любой объект в метод bind(), и вы все равно получите объект гидратированного поля.

После проверки гидратации объектов, прикрепленных к другим наложениям, они все гидратируются, если вызывается метод bind() на форме. Надеюсь, это поможет кому-то более или менее новому для ZF2, как я.