Подтвердить что ты не робот

Непосредственный доступ к значению поля формы при переопределении виджета в шаблоне ветки

То, что я хочу сделать, это получить переменные, хранящиеся в виде формы.

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

Моя форма имеет такие свойства, как url, title и т.д., и я пытаюсь получить к ним доступ сюда, чтобы использовать его в блоке виджета поля.

Я искал его и пришел https://groups.google.com/forum/?fromgroups=#!topic/symfony2/onor9uFte9E, который предложил:

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

который не работал у меня.

Примечание. Если я делаю var_dump в $form- > createView() в моем контроллере, я получаю:

    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)

Я хочу, например, получить доступ к этому URL-адресу, но, возможно, не могу это сделать после многих вариантов. Включая использование {{value}}, {{value.url}} Но, несмотря на варны, я могу сделать {{full_name}} и получить panasonic_testetavisbundle_producttype.

Любые идеи?

Edit2: Я обнаружил настоящую проблему...

Edit3: Увидев, что этот вопрос довольно популярен, я решил уточнить, что я пытался сделать, если он помогает кому-то в той же ситуации. Если вы полностью полагаетесь на то, что задает вопрос, как я изложил в своих исследованиях, и что поддержка Бесника действительно правильна. Теперь я хотел бы сделать это для каждого файла входного типа, получить URL-адрес от объекта, используемого для визуализации формы, и добавить ссылку предварительного просмотра, используя извлеченный URL-адрес, рядом с файлом типа ввода. Если вы попытаетесь получить форму var типа входного типа "file", как это, "{{form.vars.value.url}}" в моем коде, это не сработает, поскольку, если я правильно помню, вы получаете токен вместо URL-адреса, хранящегося внутри объекта.

4b9b3361

Ответ 1

Вы можете получить доступ к текущим данным формы через form.vars.value:

{{ form.vars.value.title }}

См. документацию Symfony2 Forms: http://symfony.com/doc/current/book/forms.html#rendering-a-form-in-a-template

Дамп-вары с помощью функции dump:

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

Если вы используете подформы или хотите иметь значение определенного поля:

{{ form.FIELD.vars.VALUE }}

Ответ 2

Вы можете получить доступ к значениям родительского родителя из блока виджетов, используя form.parent.vars

Ответ 3

Например, мы хотим отобразить значение из текстового поля типа primerNombre, которое нам понадобится

{{ form.vars.value.primerNombre }}

Если мы хотим отобразить имя одного из детей, нам понадобится

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

Удачи!

Ответ 4

Edit2:

Наконец, я действительно получил значение текущей строки в {{значение}} здесь:

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

Но в моем случае я получаю токен вместо значения, так как я использую файл типа ввода. Это связано с мерой безопасности в Symfony2.