2013-10-12 29 views
0

我在Symfony2中构建一个表单,对于某些行,我想将每个窗口小部件的值的格式化版本作为title属性传递,然后我可以在另一个div中显示该属性。 如果我没有设置格式化版本,我只需将实际的非格式化值插入到div中。在Symfony2 FormBuilder中获取变量值

理想的情况下,我的树枝代码可能是这样的:

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

也许你应该使用[数据转换器](http://symfony.com/doc/current/cookbook/form/data_transformers.html)? – sergekv

回答

0

看到这个文档: http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html#dynamic-generation-for-submitted-forms

您必须设置一个侦听器PRE_SET_DATA事件,您formBuilder。 然后,你将能够访问通过这种形式的数据:

$data = $event->getData(); 

现在你探微必须添加里面的字段。 /!\只有当对象被传递给表单时,才会添加字段。 因此,如果您仍然希望在没有数据传递的情况下输入字段,则必须在事件列表函数之外添加字段,然后修改此函数内的字段属性标题。

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

这工作!谢谢@zapcost。 但是,我最终将实体数据作为选项传递给FormType并直接检索数据。这样我可以更具体,避免在提交表单时出现错误。 –