我正在Symfony2中构建一个表单,对于某些行,我想将每个窗口小部件的值的格式化版本作为title
属性传递,然后我可以在另一个div
中显示。
如果我没有设置格式化版本,我只会将实际的非格式化值插入到div
中。
理想情况下,我的twig代码可能如下所示:
{% block form_row %}
{% spaceless %}
<div class="field-display-value">
{% if attr['title'] is defined %}
{{ attr['title'] }}
{% else %}
{{ form.vars.value }}
{% endif %}
</div>
<div class="field-widget">
{{ form_widget(form) }}
</div>
{% endspaceless %}
{% endblock form_row %}
但我不知道如何在formBuilder中访问小部件的值。理想情况下,我想要这样的事情:
$builder->add('some_field', 'text', array(
'attr' => array('title' => someFormattingFunction( this.widget.value ),
));
显然,this.widget.value
伪代码不起作用。
不知道是否可能,但我不想诉诸javascript疯狂。 有什么想法吗?
答案 0 :(得分:0)
您必须在formBuilder上为PRE_SET_DATA事件设置一个侦听器。 然后,您将能够使用以下命令访问传递给此表单的数据:
$data = $event->getData();
现在你必须在里面添加你的字段。 /!\只有在将对象传递给表单时才会添加您的字段。 因此,如果在没有数据传递时仍然需要字段,则必须在事件列表函数之外添加字段,然后修改此函数内的字段属性标题。
$form = $event->getForm();
$form->add('some_field', 'text', array(
'attr' => array('title' => someFormattingFunction($data.getSomething()),
));