Symfony2,如何使表单标签类/属性与其输入不同?
Posted
技术标签:
【中文标题】Symfony2,如何使表单标签类/属性与其输入不同?【英文标题】:Symfony2, How to make a form label class/attr different than its input? 【发布时间】:2012-06-10 18:54:25 【问题描述】:我想构建一个带有标签和输入的表单,但它们的类应该不同。下面的代码为具有相同属性的输入创建标签:
public function buildForm(FormBuilder $builder, array $options)
$builder
->add('hours', null ,
array('attr'=>
array(
'placeholder'=>'Working Hours',
'class'=>'ui-spinner-box') ) )
在我上面的代码中,ui-spinner-box
将为标签和输入输出。它甚至会为其标签放置占位符。
那么如何让它分别为标签创建attr
,这样我就可以输出如下内容:
<label class="MYCLASSFOR_LABEL" for="input_id">Hours</label>
<input class="MYCLASSFOR_INPUTS" type="text" id="input_id" name="" value="" >
【问题讨论】:
【参考方案1】:如documentation中提到的:
attr : 将在字段上呈现为 html 属性的键值数组 label_attr:一个键值数组,将在标签上呈现为 HTML 属性您可以在树枝模板或表单构建器中设置这些属性:
树枝模板:
对于 symfony 2.1 和更新的使用:
form_label(form.hours, null, 'label_attr': 'class': 'foo')
在旧的 symfony 2.0 中它曾经是
form_label(form.hours, 'label_attr': 'class': 'MYCLASSFOR_LABEL' )
form_widget(form.hours, 'attr': 'class': 'MYCLASSFOR_INPUTS' )
表单生成器
public function buildForm(FormBuilderInterface $builder, array $options)
$builder->add('hours', null, array(
'label_attr' => array('class' => 'MYCLASSFOR_LABEL'),
'attr' => array('class' => 'MYCLASSFOR_INPUTS'),
));
【讨论】:
其实它必须是: form_label(hours, null, 'attr': 'class': 'MYCLASSFOR_LABEL' )
,因为第二个参数是标签名称。如果你传递 null 它仍然会使用构建表单中设置的值
在 buildForm 中可能而且更容易——看我的回答
对@insertusernamehere 评论的小更新,应该是 form_label(hours, null, 'label_attr': 'class': 'MYCLASSFOR_LABEL' )
在文档中的任何地方都找不到这个,但就在上面!【参考方案2】:
以上内容不再正确,至少在我使用它的上下文中。在 Symfony 2.1 中,解决方案是:
form_label(form.item, label|default(null), 'label_attr': 'class': 'MYCLASS' )
【讨论】:
【参考方案3】:这可能是新的,但现在有一种简单的方法可以做到这一点:
$builder
->add('hours', null , array(
'attr'=>
array(
'placeholder'=>'Working Hours',
'class'=>'MYCLASSFOR_INPUTS')
) ,
'label_attr' => array(
'class' => 'MYCLASSFOR_LABEL'
)
);
您正在寻找的选项是label_attr
。
【讨论】:
正是我想要的 这对单选按钮(选择类型)有何作用? label_attr 似乎只适用于整个标签,而不适用于每个单选按钮选项旁边的标签。【参考方案4】:这在 Symfony 2.3 中适用于我:
form_row(form.hours, 'label': 'Hours:'
,'label_attr': 'class': 'MYCLASSFOR_LABEL'
,'attr': 'class': 'MYCLASSFOR_INPUTS'
)
【讨论】:
以上是关于Symfony2,如何使表单标签类/属性与其输入不同?的主要内容,如果未能解决你的问题,请参考以下文章