在Symfony2 FormBuilder中获取变量值

时间:2013-10-12 17:45:51

标签: forms symfony themes twig

我正在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疯狂。 有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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

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

$data = $event->getData();

现在你必须在里面添加你的字段。 /!\只有在将对象传递给表单时才会添加您的字段。 因此,如果在没有数据传递时仍然需要字段,则必须在事件列表函数之外添加字段,然后修改此函数内的字段属性标题。

$form = $event->getForm();
$form->add('some_field', 'text', array(
    'attr' => array('title' => someFormattingFunction($data.getSomething()),
));