0

我正在 Symfony2 中构建一个表单,对于某些行,我想将每个小部件值的格式化版本作为title属性传递,然后我可以在另一个div. 如果我没有设置格式化版本,我只会将实际的非格式化值插入到其中div

理想情况下,我的树枝代码可能如下所示:

{% 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 疯狂。有任何想法吗?

4

1 回答 1

0

请参阅此文档: http ://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms

您必须在 formBuilder 上为 PRE_SET_DATA 事件设置一个侦听器。然后,您将能够访问传递给此表单的数据:

$data = $event->getData();

现在你只需要在里面添加你的字段。/!\ 只有在将对象传递给表单时,才会添加您的字段。所以如果在没有数据传递的情况下还想要字段,就得在事件监听函数外添加字段,然后在这个函数里面修改字段属性title。

$form = $event->getForm();
$form->add('some_field', 'text', array(
    'attr' => array('title' => someFormattingFunction($data.getSomething()),
));
于 2013-10-13T15:24:48.147 回答