使用Twig访问Symfony子表单中的form.vars.value



我正在开发Symfony 2.7 WebApp,我想为其中一个实体使用自定义表单小部件。Widgets需要访问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 的自定义小工具

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

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

但是,在addresses集合的Subform中,form.vars.value变量为空。转储仅显示""

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

更新:

评论中要求的一些附加信息:

@Jeet:如前所述,转储显示空值/string:""

@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 %}  

使用value而不是form.vars.value

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

最新更新