Ich arbeite an einer Symfony 2.7 WebApp und möchte ein benutzerdefiniertes Formular-Widget für eines der Attribute verwenden. Die Widgets müssen auf die form.vars.value
zugreifen. Dies funktioniert gut, solange das Widget im Hauptformular verwendet wird. Aber wenn das Widget in einem Unterformular verwendet wird, ist form.vars.value
leer.Zugriff auf form.vars.value im Symfony-Teilformular mit Zweig
Die in der Form verwendeten Klassen:
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 {
...
}
Die benutzerdefinierten Formulartypen für Klassen Thesen:
// 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' => '...',
...
))
...;
}
}
Das benutzerdefinierte Widget für die PhoneNumberEdit
{% block phone_number_edit_widget %}
...
{{ dump(form.vars.value) }}
...
Die PhoneNumberEdit für die Hauptform (die AddressBookEntry
darstellt) funktioniert gut. Die dump
-Anweisung zeigt den Inhalt des zugewiesenen Objekts PhoneNumber
.
Innerhalb des Unterformulars der addresses
Sammlung ist die form.vars.value
Variable jedoch leer. Die Dump zeigt nur ""
.
Wie kann ich innerhalb des Unterformulars auf form.vars.value
zugreifen? Wie kann das Widget erkennen, ob es im Hauptformular oder in einem Unterformular verwendet wird?
UPDATE:
Einige zusätzliche Informationen wie in den Kommentaren gefragt:
@Jeet: beschrieben, wie vor der Müllhalde zeigt ein leerer Wert/string: ""
@DOZ: Dies ist der Zweigcode:
{{ 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 %}
können Sie mir den Code zeigen, wo Sie form.vars.value im Unterformular ablegen? (die Zweigvorlage mit all deinem Code, wo du die Formulare anrufst) – DOZ
Was bekommst du von '{{dump (form.vars.data)}}'? – Jeet