web-dev-qa-db-fra.com

Accéder directement à la valeur d'un champ de formulaire lors du remplacement d'un widget dans un modèle de brindille

Ce que je veux faire, c'est obtenir des variables stockées dans la vue formulaire.

{% 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 %}

Mon formulaire a des propriétés telles que l'URL, le titre, etc., et j'essaie d'y accéder ici pour l'utiliser dans le bloc de widgets de champ.

Je l'ai cherché et je suis venu sur https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E qui a suggéré:

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

qui n'a pas fonctionné pour moi.

Note: Si je fais un var_dump sur $ form-> createView () dans mon contrôleur, je reçois:

    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)

Je veux accéder à cette URL par exemple, mais n'arrive pas à le faire après de nombreuses variations. Y compris l’utilisation de {{valeur}}, {{valeur.url}} Mais en dépit de vars, je peux faire {{nom complet}} et obtenir le type panasonic_testetavisbundle_product.

Des idées?

Edit2: J'ai découvert le vrai problème ...

Edit3: Voyant que cette question est très populaire, j'ai décidé de préciser ce que j'ai tenté de faire au cas où cela aiderait quelqu'un dans la même situation. Si vous vous appuyez strictement sur ce que la question demande, comme je l'ai dit de mes recherches et que Besnik soutenu sont en effet corrects. Maintenant, ce que je voulais faire, c’est que pour chaque fichier de type en entrée, obtenir l’URL de l’objet utilisé pour le rendu du formulaire et ajouter un lien de prévisualisation, en utilisant l’URL récupérée, à côté du fichier de type en entrée. Si vous essayez d’obtenir la forme var du type d’entrée "fichier" comme ceci "{{form.vars.value.url}}" dans mon code, cela ne fonctionne pas car, si je me souviens bien, vous recevez un jeton à la place de l'URL stockée dans l'objet.

48
Rishi

Vous pouvez accéder aux données actuelles de votre formulaire via form.vars.value:

{{ form.vars.value.title }}

Voir la documentation de Symfony2 Forms: http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

Vider les variables en utilisant la fonction dump:

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

Si vous utilisez des sous-formulaires ou souhaitez avoir la valeur d'un champ spécifique:

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

Vous pouvez accéder aux valeurs du parent parent à partir d'un bloc de widget à l'aide de form.parent.vars.

4
Jevgenij Evll

Par exemple, nous voulons rendre la valeur d’un champ de texte de type appelé primerNombre dont nous aurons besoin.

{{ form.vars.value.primerNombre }}

Si nous voulions donner le nom d’un des enfants, il nous faudrait

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

Bonne chance!

2
Rodol Velasco

Edit2:

Enfin, j’obtenais effectivement la valeur de la ligne actuelle dans {{valeur}} ici:

{% 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 %}

Mais dans mon cas, je reçois un jeton au lieu de la valeur puisque j'utilise un fichier de type d'entrée. Cela est dû à une mesure de sécurité dans Symfony2.

0
Rishi

Dans Symfony> 3, vous pouvez utiliser:

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