Symfony - 将自定义数据从 Form Builder 传递到表单主题

Symfony - pass custom data from Form Builder to form theme

我想在我的一堆字段周围设置一个特殊的 div。为此,我想向表单构建器添加一些我可以在 form_theme 中检测到的东西,并在 div 存在时设置它。

我尝试添加

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

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

{{ block('widget_container_attributes') }}

只给出widget属性,

{{ block('row_container_attributes') }}

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

我在官方网站上查找了更多信息,here 主要是但没有成功...

在此先感谢您的帮助!

如果你把它放在你的表单生成器中,那么你还不如永久地设置在你的模板中。如果设置数据需要一些逻辑,那么它无论如何都属于你的控制器,所以把它放在那里开始。

控制器:

public function someAction()
{

    // ....

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

然后在你的树枝模板中

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

编辑: 要每次都在你的模板中渲染,你可以直接在渲染字段上设置一个class:

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