我已经开始使用Symfony2,但我遇到了一些问题。
我想手工渲染字段,但它不起作用,因为我呈现的字段也显示form_rest()
函数,所以我有两个相同的字段。
这是我的代码:
<div>
{{ form_errors(form.contenu) }}
<textarea id="{{ form.contenu.vars.id }}" name="{{ form.contenu.vars.full_name }}">{{ form.contenu.vars.value }}</textarea>
</div>
而且,在表格的最后,我必须把它:
{{ form_rest(form) }}
但它显示“contenu”字段:(
你知道这是什么问题吗?
答案 0 :(得分:188)
另一种选择是明确地将字段标记为已渲染:
{% do form.contenu.setRendered %}
答案 1 :(得分:41)
我认为另一个 这样做的方法不那么简单:
{{ form_widget(form._token) }} // render the CSRF Token
{{ form_end(form, {'render_rest': false}) }} // do not render anything else
它来自official documentation(v3.0)所以我认为它几乎是最佳实践。
答案 2 :(得分:32)
{{ form_rest(form) }}
在最后,在“手动”渲染每个字段之后。如果您将其用于CSRF令牌,则始终可以使用以下内容进行渲染:
{# Token CSRF #}
{{ form_widget(form._token) }}
答案 3 :(得分:10)
您不希望显示某些字段的情况表明设计错误。您可以将一些参数提供给它__construct
以使其成为条件(例如,包含/排除某些字段),或者您可以创建单独的Form
类(在我看来,这有点)矫枉过正)。
几个月前,当用户插入/更新记录时表单不同,我遇到了一些常见情况。它是这样的:
...
public function __construct($isUpdateForm){
$this->isUpdateForm= $isUpdateForm;
}
public function buildForm(FormBuilder $builder, array $options){
....
$builder->add('some_filed', 'text', ..... );
if ( $this->isUpdateForm ){
$builder->add(.....);
}
....
}
....
如果由于某些原因您无法重构表单类,您仍然可以显示不需要的字段,但将它们包装到具有CSS <div>
属性的display:none
中。这样“他们仍然在那里”(并且无论如何都会正常处理),但用户看不到。
希望这会有所帮助......