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>
我想在我的一堆字段周围设置一个特殊的 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>