我正在开发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) }}
...