2016-08-04 35 views
1

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 %} 
+0

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

+0

Was bekommst du von '{{dump (form.vars.data)}}'? – Jeet

Antwort

1

Verwenden Sie Wert anstelle von form.vars.value

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

Leider funktioniert das auch nicht. Das Ergebnis ist das gleiche: Der "Dump" im Unterformular zeigt nur "" "an –