使用Twig在Symfony子窗体中访问form.vars.value

我正在开发Symfony 2.7 WebApp,我想为其中一个实体使用自定义窗体小部件。 窗口小部件需要访问form.vars.value 。 只要Widget在主表单中使用,这可以正常工作。 但是当在子窗体中使用Widget时, form.vars.value是空的。

表单中使用的类:

class AdressBookEntry { 
    // The main phone number of this contact: Type PhoneNumber
    protected $mainPhoneNumber;
    //...getter and setter for mainPhoneNumber

    // An array of Addresses
    protected $addresses;
    //...getter and setter for addresses

    ...
}

class Address { 
    // The phone number of this address: Type PhoneNumber
    protected $phoneNumber;
    //...getter and setter for phoneNumber

    ...
}

class PhoneNumber {
    ...
}

这些类的自定义表单类型:

// Custom FormType for AddressBookEntries
class AdressBookEntryType extends AbstractType {
    ...

    public function buildForm(FormBuilderInterface $builder, array $options) {  
        // Type 'phone_number_edit' is registered in services.yml
        $builder
            ->add('mainPhoneNumber', 'phone_number_edit', array(
                'label' => '...',
                ... 
            ))  

            ->add('addresses', 'collection', array(
                'label' => '...',
                ... 
            ));
    }
}


// Custom FormType for Address
class AddressType extends AbstractType {
    ...

    public function buildForm(FormBuilderInterface $builder, array $options) {  
        $builder
            ->add('mainPhoneNumber', 'phone_number_edit', array(
                'label' => '...',
                ... 
            ))  

            ...;
    }
}

PhoneNumberEdit的自定义Widget

{% block phone_number_edit_widget %}
    ...
    {{ dump(form.vars.value) }}
    ...

主窗体的PhoneNumberEdit(代表AddressBookEntry )工作正常。 dump语句显示分配的PhoneNumber对象的内容。

然而,在addresses集合的子form.vars.value中, form.vars.value变量是空的。 转储显示""

那么,如何在子窗体中访问form.vars.value ? 小部件如何识别它在主窗体或子窗体中的使用?

更新:

评论中提到的一些额外信息:

@Jeet:如前所述,转储显示一个空值/字符串: ""

@DOZ:这是Twig代码:

{{ form_start(form) }}
    {{ form_errors(form) }}         
    {{ form_row(form.name) }}

    {{ form_widget(mainPhoneNumber) }}

    <ul data-prototype"{{ _self.addressItem(form.addresses.vars.prototype)|e('html_attr') }}" >
        {% for address in form.addresses %}
            {{ _self.addressItem(address) }}
        {% endfor %}
    </u>

    ...
{{ form_end(form) }}

{% macro addressItem(address) %}
    <li>
        {{ form_widget(address.phoneNumber) }}
        ...
    </li>
{% endmacro %}  

使用值而不是form.vars.value

{% block phone_number_edit_widget %}
    ...
    {{ dump(value) }}
    ...
链接地址: http://www.djcxy.com/p/81401.html

上一篇: Access form.vars.value in Symfony subform using Twig

下一篇: Customize an individual Field symfony2.8