du127953
du127953
2014-04-16 07:37

ZF2:嵌套字段集; 结合和水合作用

已采纳

I'm trying to deal with some fieldsets witch are bind with the same table entity, and nested in some other one. Exemple:

Model:

Table Building
-> Name
-> Description
-> street name
-> street Number
-> consierge's phone
-> level count
-> height
-> Year of construction

All this fields are in one table but i whant to use multiples fieldset, like this for exemple:

descriptionBlgFieldset
->name
->description

AddressBlgFieldset
->street Name
->street Number
-> consierge's phone

FeaturesBlgFieldset
-> level count
-> height
-> Year of construction

Then i whant to blend those in some other field set, for exemple description with address, or description with features, or all of them. I was thinking this was peace of cake, but i dont know how to deal for the binding:

echo $form->get('building')->get('address')->get('streetNumber)

give me:

<input name="building[addresse][streetNumber]" />

But it's must be:

<input name="building[streetNumber]" />

I what thinking about the "set_as_base_fieldset" option, but it's only work when I'm hadding a fieldset in a form object, not in a fieldset.

How could i do that? (i hope this whas clear enought)

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • douya1974 douya1974 7年前

    If you want building[streetNumber] then you don't want to use a Fieldset. That's really all there is to it. A Zend\Form\Fieldset is an Element that encapsulates a set of properties that are standalone / their own object. For example:

    Table Buildings
    - id
    - attr1
    - addr_id
    
    Table Addresses
    - id
    - name
    - nr
    

    In this case you'd have an AddressFieldset. But this isn't what you want. I assume you only divided this into fieldsets to have an impact on the default rendering. This is a mis-use of Zend\Form\Fieldset. You simply will have to render your form differently like

    echo $this->form()->openTag($form);
    echo "<fieldset>
    ";
    echo "    <legend>Address</legend>
    ";
    echo $this->formRow($form->get('streetName'));
    echo $this->formRow($form->get('streetNuber'));
    echo "</fieldset>
    ";
    echo "<fieldset>
    ";
    echo "    <legend>Features</legend>
    ";
    echo $this->formRow($form->get('levelCount'));
    echo $this->formRow($form->get('height'));
    echo "</fieldset>
    ";
    echo $this->form()->closeTag();
    
    点赞 评论 复制链接分享