Ila*_*lon 66 php forms symfony twig
我已经开始使用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>
Run Code Online (Sandbox Code Playgroud)
而且,在表格的最后,我必须把它:
{{ form_rest(form) }}
Run Code Online (Sandbox Code Playgroud)
但它显示"contenu"字段:(
你知道问题是什么吗?
Fra*_*sas 194
另一种选择是将字段明确标记为已渲染:
{% do form.contenu.setRendered %}
Run Code Online (Sandbox Code Playgroud)
And*_*erj 44
在我看来,另一个不那么黑客的方法就是:
{{ form_widget(form._token) }} // render the CSRF Token
{{ form_end(form, {'render_rest': false}) }} // do not render anything else
Run Code Online (Sandbox Code Playgroud)
它来自官方文档(v3.0),所以我认为这是最佳实践.
gre*_*emo 32
{{ form_rest(form) }}
在"手动"渲染每个字段之后,最后一步.如果您将其用于CSRF令牌,则始终可以使用以下内容呈现它:
{# Token CSRF #}
{{ form_widget(form._token) }}
Run Code Online (Sandbox Code Playgroud)
Jov*_*vic 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(.....);
}
....
}
....
Run Code Online (Sandbox Code Playgroud)
如果由于某些原因你无法重构表单类,你仍然可以显示不需要的字段,但将它们包装到<div>
具有CSS display:none
属性的字段中.这样"他们仍然在那里"(并且通过一切正常处理)但用户不可见.
希望这可以帮助...