簡體   English   中英

Symfony Form Collection主題設置但提供一些數據

[英]Symfony Form Collection Theming but feed some data

Symfony 3.3

我有一個航程實體形式

航海實體中有一個集合,名為城市,是實體城市的集合。 帶有城市名稱的集合的表單也是如此。

用戶首先使用該表單並創建一個Voyage實例,並向其中添加一些城市,當用戶單擊“添加城市”按鈕時,我設法自定義了原型並通過javascript進行渲染。

表單以這種方式呈現給有趣的部分(沒有html的純凈版本):

{% extends "@User/layout.html.twig" %}
{% form_theme form.cities '@Prototype/city.html.twig' %}
{% block content %}
   {{ form_start(form) }}
   {{ form_errors(form) }}
   {{ form_row(form.cities) }}
   {{ form_rest(form) }}
   {{ form_end(form) }}
{% endblock content %}

“ form.cities”的主題:

{% block collection_widget %}
{% import '@Prototype/prototype.city.twig' as proto %}
{% spaceless %}
<div class="collection">
    {% if prototype is defined %}
    {% set attr = attr|merge({'data-prototype': proto.city(prototype)|escape }) %}
    {% endif %}

    <div {{ block('widget_container_attributes') }}></div>
    <div id="container-cities">
    {# Here I will add the cities via javascript when user add one #}
    </div>
</div>
{% endspaceless %}
{% endblock collection_widget %}

此主題中使用的宏文件並作為proto導入:

{% macro city(widget, id, name, zip) %}
{% spaceless %}
<div 
    class="added-city border-gray" 
    data-id="{{id|default('__id__')}}"  
    id="{{name|default('__name__')}}">

    {{name|default('__city_name__')}} ({{zip|default('__zip__')}})
    {{ form_errors(widget) }}
    {{ form_widget(widget) }}
</div>
{% endspaceless %}
{% endmacro %}

我的一般問題:當用戶想要編輯其Voyage實例時,它已經包含了一些城市。 我該如何渲染它們? 如何從主題中訪問城市變量。

我的部分解決方案:我想從主題文件中提取“ container-cities”塊到呈現的html,在該html中是初始呈現的表單,並且我可以在其中訪問變量並執行以下操作:

{% import '@Prototype/prototype.city.twig' as proto %}
{% for city in form.cities %}
{{ proto.city(city, city.name) }}
{% endfor %}

但這給了我這個錯誤:

Neither the property "name" nor one of the methods "name()", "getname()"/"isname()"/"hasname()" or "__call()" exist and have public access in class "Symfony\Component\Form\FormView".

(它不會在city.id上失敗,可能是由於其他名為id的字段)

我的問題

  • 如何訪問主題內的城市並使用宏對其進行渲染?

要么

  • 由於form.cities似乎不是實際的City實體集合,因此如何訪問渲染表單的城市項目,並擺脫該錯誤?

謝謝

我終於解決了,就是這么簡單:

我只是在表單主題中使用了它:

{% for city in form %}
{{ proto.city(city, city.vars.value.id, city.vars.value.name, city.vars.value.zip) }}
{% endfor %}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM