Symfony - 将表单生成器中的自定义数据传递给表单主题

时间:2017-03-18 23:24:42

标签: symfony symfony-forms

我想围绕一堆我的字段设置一个特殊的div。为此我想在表单构建器中添加一些我可以在form_theme中检测到的内容,并在它出现时设置div。

我尝试添加

->add('field', new myCustomType(), array('inherit_data' => true, "label" => false, "required" => false, 'attr' => array("test" => "aaa")))

到表单构建器,设置自定义attr,它实际上在html中呈现为属性...但我无法在表单主题中检测到它。

{{ block('widget_container_attributes') }}

仅提供小部件属性,

{{ block('row_container_attributes') }}

不起作用。我实际上很难在网上找到关于表格主题的blocks中可用变量以及如何使用它们的任何来源(已经很难知道如何调用块)。

我在官方网站上查找了更多信息here,但大部分没有成功......

非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果您将其放在表单构建器中,那么您也可以在模板中永久设置。如果设置数据需要一些逻辑,那么无论如何它都属于你的控制器,所以就把它放在那里开始。

控制器:

public function someAction()
{

    // ....

    return $this->render('some_twig_template.twig.html', array(
        'attr' => array("test" => "aaa")
    );
}

然后在你的树枝模板

{{ dump(attr) }}
{{ dump(attr.test) }}

编辑: 要每次在模板中渲染,可以直接在渲染字段上设置类:

{{ form_label(form.field, 'My label', { 'label_attr': {'class': 'js-hidden-row'} }) }}
{{ form_widget(form.field, { 'attr': {'class': 'js-hidden-row'} }) }}

然后在我的javascript中你可以用一些简单的jQuery隐藏:

<script>
    jQuery(document).ready(function() {
        $('.js-hidden-row').hide();
    });
</script>