Php 如何检测窗体是否还有任何元素需要渲染?

Php 如何检测窗体是否还有任何元素需要渲染?,php,symfony,twig,symfony-forms,Php,Symfony,Twig,Symfony Forms,假设我使用呈现一个只有两个字段(用户名和电子邮件)的简单表单 我使用form\u row()来呈现这两个字段以添加自定义css,然后调用form\u widget()来呈现其余元素(另一个选项是form\u rest()) 我正在寻找的是一种预先检查form\u widget()是否会打印任何对象的方法,以便在有额外字段的情况下添加自定义html。 我是这样做的: //app/form/index.html.twig {#其他模板代码#} ... {呈现形式:} {{form_start(for

假设我使用呈现一个只有两个字段(用户名和电子邮件)的简单表单

我使用
form\u row()
来呈现这两个字段以添加自定义css,然后调用
form\u widget()
来呈现其余元素(另一个选项是
form\u rest()
) 我正在寻找的是一种预先检查
form\u widget()
是否会打印任何对象的方法,以便在有额外字段的情况下添加自定义html。 我是这样做的:

//app/form/index.html.twig
{#其他模板代码#}
...
{呈现形式:}
{{form_start(form)}}
{{form_行(form.username)}
{{form_row(form.email)}
{%set form\u rendered=form\u小部件(form)%}
{%if form_rendered%}
其他领域
{{form_rendered | raw}}
{%endif%}
{{form_end(form)}}
{#结束形式}
...
{#其他模板代码#}
然而,我并不满意。还有更好的办法吗


编辑:当使用CSRF保护(默认情况下激活)时,前面的代码将始终打印
其他字段
,因为表单中有一个额外的隐藏字段用于我们没有打印的令牌。我们需要用
{form_row(form.\u token)}
src/Symfony/Component/form/FormView.php
中检查代码,我找到了一个完全符合我要求的函数

//src/Symfony/Component/Form/FormView.php

    /**                                                                  
     * Returns whether the view was already rendered. 
     * 
     * @return bool Whether this view's widget is rendered 
     */
     public function isRendered()
     {
        $hasChildren = 0 < count($this->children);

        if (true === $this->rendered || !$hasChildren) {
            return $this->rendered;
        }

        if ($hasChildren) {
            foreach ($this->children as $child) {
                if (!$child->isRendered()) {
                    return false;
                }
            }

            return $this->rendered = true;
        }

        return false;
    }
//src/Symfony/Component/Form/FormView.php
/**                                                                  
*返回视图是否已呈现。
* 
*@return bool是否呈现此视图的小部件
*/
公共职能是需要的()
{
$hasChildren=0children);
如果(true==$this->rendered | |!$haschilds){
返回$this->rendered;
}
如果(有子女){
foreach($this->childrenas$child){
如果(!$child->isRendered()){
返回false;
}
}
返回$this->rendered=true;
}
返回false;
}
现在,该函数可以在模板中使用,如下所示:

{% if not form.isRendered() %}
    <h3>Other fields</h3>
    {{ form_widget(form) }}
{% endif %}
{%if不是form.isRendered()%}
其他领域
{{form_widget(form)}
{%endif%}