【发布时间】:2016-08-04 14:23:31
【问题描述】:
我正在开发 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 的自定义小部件
{% block phone_number_edit_widget %}
...
{{ dump(form.vars.value) }}
...
主窗体(代表AddressBookEntry)的PhoneNumberEdit 工作正常。 dump 语句显示分配的PhoneNumber 对象的内容。
但是,在 addresses 集合的子表单中,form.vars.value 变量为空。转储只显示""。
那么,如何在子表单中访问form.vars.value?小部件如何识别它是在主窗体还是子窗体中使用?
更新:
cmets 中询问的一些附加信息:
@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 的代码吗? (带有您调用表单的所有代码的树枝模板)
-
你从
{{ dump(form.vars.data) }}得到什么?