wake-up-neo.net

Greifen Sie direkt auf den Wert eines Formularfelds zu, wenn Sie das Widget in einer Zweigvorlage überschreiben

Ich möchte, dass Variablen in der Formularansicht gespeichert werden.

{% form_theme edit_form _self %}

{% block field_widget %}
{% spaceless %}
{% set type = type|default('text') %}
<input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ value }}" {% endif %}/>

{# MY CODE #}
{% if type == "file" %}
<a class="BOpreview" href="{# NEED TO REPLACE VAR HERE #}">Aperçu</a>
{% endif %}

{# MY ATTEMPT #}
{{ form.title.get('value') }}
{{ form.vars.value.url }}

{% endspaceless %}
{% endblock field_widget %}

Mein Formular hat Eigenschaften wie URL, Titel usw. und ich versuche, hier auf sie zuzugreifen, um sie im Feld-Widget-Block zu verwenden.

Ich habe danach gesucht und kam zu https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E , das Folgendes vorgeschlagen hat:

{{ form.title.get('value') }}
{{ form.vars.value.url }}

was für mich nicht funktionierte.

Hinweis: Wenn ich in meinem Controller einen var_dump auf $ form-> createView () mache, erhalte ich Folgendes:

    object(Symfony\Component\Form\FormView)[331]
    private 'vars' => 
      array (size=15)
        'value' => 
          object(Panasonic\TestEtAvisBundle\Entity\Product)[168]
            protected 'reviewArray' => 
              object(Doctrine\ORM\PersistentCollection)[234]
                ...
            protected 'testArray' => 
              object(Doctrine\ORM\PersistentCollection)[221]
                ...
            protected 'fbshareArray' => 
              object(Doctrine\ORM\PersistentCollection)[317]
                ...
            private 'id' => int 2
            private 'name' => string 'Nom du produit' (length=14)
            private 'title' => string '<span>Titre </span>' (length=19)
            private 'image' => string 'bundles/testetavis/uploads/product/0d9d9550.png' (length=47)
            private 'fbImage' => string 'bundles/testetavis/uploads/product/facebook//product_e928cd96.jpg' (length=65)
            private 'description' => string '<span>Descriptif </span>' (length=24)
            private 'url' => string 'http://www.google.com' (length=21)
            private 'creationDate' => 
              object(DateTime)[210]
                ...
            private 'modificationDate' => 
              object(DateTime)[209]
                ...
            private 'isDeleted' => int 0
        'attr' => 
          array (size=0)
            empty
        'form' => 
          &object(Symfony\Component\Form\FormView)[331]
        'id' => string 'panasonic_testetavisbundle_producttype' (length=38)
        'name' => string 'panasonic_testetavisbundle_producttype' (length=38)
        'full_name' => string 'panasonic_testetavisbundle_producttype' (length=38)

Ich möchte zum Beispiel auf diese URL zugreifen, kann aber nach vielen Variationen nicht in der Lage sein. Einschließlich der Verwendung von {{value}}, {{value.url}} Aber trotz vars kann ich {{full_name}} ausführen und panasonic_testetavisbundle_producttype abrufen.

Irgendwelche Ideen?

Edit2: Ich habe das eigentliche Problem herausgefunden ...

Edit3: Da diese Frage sehr beliebt ist, entschied ich mich zu klären, was ich versucht habe, falls sie jemandem in derselben Situation hilft. Wenn Sie sich streng auf das verlassen, was die Frage stellt, wie ich aus meinen Nachforschungen festgestellt habe und dass Besnik die Unterstützung für richtig hält. Nun wollte ich für jede Eingabetypdatei URL abrufen, um ein Formular zu rendern, und einen Vorschau-Link unter Verwendung der abgerufenen URL neben der Eingabetypdatei anfügen. Wenn Sie versuchen, die Form var eines Eingabetyps "file" wie "{{form.vars.value.url}}" in meinem Code abzurufen, funktioniert dies nicht, da Sie, wenn ich mich richtig erinnere erhalten Sie ein Token anstelle der im Objekt gespeicherten URL.

48
Rishi

Auf die aktuellen Daten Ihres Formulars können Sie über form.vars.value zugreifen:

{{ form.vars.value.title }}

Siehe die Dokumentation zu Symfony2 Forms: http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

Dump-Variablen mit der dump-Funktion:

{{ dump(form.vars.value) }}

Wenn Sie Unterformulare verwenden oder einen bestimmten Feldwert haben möchten:

{{ form.FIELD.vars.VALUE }}
106
Besnik

Sie können mit form.parent.vars von einem Widgetblock auf die Werte des übergeordneten übergeordneten Elements zugreifen.

4
Jevgenij Evll

Zum Beispiel möchten wir den Wert aus einem Textfeld namens primerNombre rendern, das wir benötigen

{{ form.vars.value.primerNombre }}

Wenn wir den Namen eines der Kinder darstellen möchten, werden wir es brauchen

{% for hijo in form.hijos %}
    <td><div align="left">{{ form_widget(hijo.vars.value.primerNombre) }}</div></td>
{% endfor %}

Viel Glück!

2
Rodol Velasco

Edit2:

Schließlich bekam ich tatsächlich den Wert der aktuellen Zeile in {{value}} hier:

{% block field_widget %}
{% spaceless %}
{% set type = type|default('text') %}
<input type="{{ type }}" {{ block('widget_attributes') }} {% if value is not empty %}value="{{ **value** }}" {% endif %}/>

{# MY CODE #}
{% if type == "file" %}
<a class="BOpreview" href="{{ value }}">Aperçu</a>
{% endif %}

{% endspaceless %}
{% endblock field_widget %}

In meinem Fall bekomme ich jedoch einen Token anstelle des Werts, da ich die Eingabetypdatei verwende. Dies ist auf eine Sicherheitsmaßnahme in Symfony2 zurückzuführen.

0
Rishi

In Symfony> 3 können Sie Folgendes verwenden:

form.vars.value.Entity.someValue
0
Frager.