如何在ZF2中扩展字段集

时间:2014-04-23 09:58:54

标签: doctrine zend-framework2

Doctrine的类表继承映射策略涉及根据父表中的discriminator列中的值将父表连接到多个子表中的一个。例如,父表可能包含列a,b和c;列c中的值为foobar。名为'foo'的子表可能包含列d,e,f和g;而名为“bar”的子表可能包含列p,q,r和s。为父项定义单个实体,并为每个子项定义单独的实体('foo'和'bar')。在继承映射策略中,子实体'扩展'父实体,因此子代中不需要重新定义父实体中的元素。

我的问题是,我们可以'扩展'子场集吗? 'foo'字段集将由元素a,b,c,d,e,f和g组成,'bar'字段集将由元素a,b,c,p,q,r和s组成。我们真的需要多次为元素a,b和c定义选项和属性吗?这样做会增加代码量,并且需要尽力确保a,b和c在每个'foo'和'bar'中的定义相同。

1 个答案:

答案 0 :(得分:1)

简短的回答是,你可以。

class FieldsetParent extends Zend\Form\Fieldset
{
   public function init() {
        $this->add(array('name' => 'fieldA'));
        $this->add(array('name' => 'fieldB'));
        $this->add(array('name' => 'fieldC'));
   }
}

class FieldsetFoo extends FieldsetParent
{
   public function init() {

        parent::init();

        $this->add(array('name' => 'fieldD'));
        $this->add(array('name' => 'fieldE'));
        $this->add(array('name' => 'fieldF'));
        $this->add(array('name' => 'fieldG'));
   }
}

class FieldsetBar extends FieldsetParent
{
   public function init() {

        parent::init();

        $this->add(array('name' => 'fieldP'));
        $this->add(array('name' => 'fieldQ'));
        $this->add(array('name' => 'fieldR'));
        $this->add(array('name' => 'fieldS'));
   }
}