如何在Zend Form中添加“子元素”

问题描述 投票:0回答:1

我有一个Zend表单,其中包含几个字段供用户完成。在管理系统中,我想显示完全相同的表单,但在现有表单旁边有其他元素,管理员可以在其中提供对用户输入的反馈。

您可以在下面看到我用来创建用户看到的表单的代码。

在发布这个问题之前,我看了一下Zend Form Decorator,但是我不明白这是否是解决这个问题所需要的。

public function __construct()
    {
        parent::__construct('user-feedback-form');
        $this->setAttribute('method', 'post');
        $this->setAttribute('role', 'form');

        $this->add([
            'name' => 'name',
            'type' => Text::class,
            'attributes' => [
                'id' => 'name',
                'required' => true,
                'readonly' => false,
            ],
        ]);

        $this->add([
            'name' => 'surname',
            'type' => Text::class,
            'attributes' => [
                'id' => 'surname',
                'required' => true,
                'readonly' => false,
            ],
        ]);

        $this->add([
            'name' => 'age',
            'type' => Number::class,
            'attributes' => [
                'id' => 'age',
                'required' => true,
                'readonly' => false,
            ],
        ]);
    }
zend-form zend-framework3 zend-form-element
1个回答
1
投票

为了重用表单的某些部分,zend提供了字段集。不是将元素添加到表单中,而是将它们添加到字段集并将字段集添加到表单中。

class UserFeedbackFieldset extends Zend\Form\Fieldset 
{
    public function init()
    {
        $this->add([
            'name' => 'name',
            'type' => Text::class,
            'attributes' => [
                'id' => 'name',
                'required' => true,
                'readonly' => false,
            ],
        ]);

        $this->add([
            'name' => 'surname',
            'type' => Text::class,
            'attributes' => [
                'id' => 'surname',
                'required' => true,
                'readonly' => false,
            ],
        ]);

        $this->add([
            'name' => 'age',
            'type' => Number::class,
            'attributes' => [
                'id' => 'age',
                'required' => true,
                'readonly' => false,
            ],
        ]);
    }
}

然后在表单中添加字段集:

class UserFeedbackForm extends Zend\Form\Form
{
    public function __construct()
    {
        parent::__construct('user-feedback-form');
        $this->setAttribute('method', 'post');
        $this->setAttribute('role', 'form');
    }

    public function init()
    {
        $this->add([
            'type' => UserFeedbackFieldset::class,
            'name' => 'user',
            'options' => [
                'use_as_base_fieldset' => true,
            ],
        ]);
    }
}

class AdminUserFeedbackForm extends Zend\Form\Form
{
    public function __construct()
    {
        parent::__construct('user-feedback-form');
        $this->setAttribute('method', 'post');
        $this->setAttribute('role', 'form');
    }

    public function init()
    {
        $this->add([
            'type' => UserFeedbackFieldset::class,
            'name' => 'user',
            'options' => [
                'use_as_base_fieldset' => true,
            ],
        ]);

        $this->add([
            'name' => 'someotherfield',
            'type' => Text::class,
            'attributes' => [
                'id' => 'someotherfield',
                'required' => true,
                'readonly' => false,
            ],
        ]);
    }
}

然后,您可以使用管理页面上的其他表单而不是原始表单。

© www.soinside.com 2019 - 2024. All rights reserved.