来自fieldset的ZF2水合物对象

时间:2016-03-21 19:46:44

标签: php zend-framework

在ZF2中,我有一个如下所示的字段集:

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对象在验证期间没有得到补充。如果我在验证后dump对象,则其所有属性都为NULL s。

我怎样才能水合附着在田野中的物体?

1 个答案:

答案 0 :(得分:0)

编辑:我的解决方案在ZF3中不起作用。

无意中找到了解决方案:我需要在控制器中的表单上调用bind()方法,如:

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

这很有意思,但你可以将任何对象扔进bind()方法,你仍然可以使字段集的对象保持水分。

在检查附加到其他场集的对象的水合作用后,如果调用表单上的bind()方法,它们都会被水化。希望这对像我这样或多或少对ZF2新手的人有所帮助。