我正在symfony项目中创建一个非常自定义的表单,目前我有类似的东西:
foreach ($foo as $c) {
$fields['crit_v_'.$c->getId()]=new sfWidgetFormInput(array('label'=>''));
$fields['crit_m_'.$c->getId()]=new sfWidgetFormTextarea(array('label'=>__($c->getName(),array(),'messages')));
}
正如你所看到的,我有2个输入foreach元素,但我只想为第二个输入一个标签。将第一个标签设置为null
或''
不会使symfony不呈现此标签并显示此标签的默认文本。 (这意味着for输入标记为crit_v_xx
。)
有没有简单的方法来隐藏特定的表单标签?
答案 0 :(得分:2)
我最终得到了以下内容:
我创建一个名为_form.php
的独立模板文件,如下所示:
<form action="<?php echo url_for('evaluation_submit')?>" method="post">
<?php echo $form['id']?>
<div> <!-- with label -->
<?php echo $form['foo']->renderLabel() ?>
<?php echo $form['foo']->renderError() ?>
<?php echo $form['foo'] ?>
</div>
<div> <!-- without label -->
<?php echo $form['bar']->renderError() ?>
<?php echo $form['bar'] ?>
</div>
在此操作的主模板中,我包含了以下表单:
<?php include_partial('form', array('form' => $form)) ?>
答案 1 :(得分:1)
你可以在generator.yml
中禁用它filter:
fields:
name: { label: false }
答案 2 :(得分:0)
将symfony表单中单个字段的标签设置为空白:
$your_form->widgetSchema->setLabel('the_field_id', ' ');
它将呈现<label>
标签,但内部有空格,因此它们不会在浏览器上输出任何内容
答案 3 :(得分:0)
您可以创建自定义行格式,以定义字段的呈现方式(如果您还没有使用自定义模板)。我在forum thread中找到了它。
一个好的解决方案可能是覆盖formatRow
方法:
public function formatRow($label, $field, $errors = array(), $help = '', $hiddenFields = null)
{
if(strip_tags($label) == '__UNSET__')
{
return strtr($this->getRowFormat(), array(
'%label%' => null,
'%field%' => $field,
'%error%' => $this->formatErrorsForRow($errors),
'%help%' => $this->formatHelp($help),
'%hidden_fields%' => is_null($hiddenFields) ? '%hidden_fields%' : $hiddenFields,
));
}
else
{
return strtr($this->getRowFormat(), array(
'%label%' => $label,
'%field%' => $field,
'%error%' => $this->formatErrorsForRow($errors),
'%help%' => $this->formatHelp($help),
'%hidden_fields%' => is_null($hiddenFields) ? '%hidden_fields%' : $hiddenFields,
));
}
}
然后将__UNSET__
设置为那些不应该标记其标签的字段的标签。
或者您甚至根据标签名称使用自定义行格式,以防止输出标签的封闭标签
行格式看起来像<div >%field%%help%%error%%hidden_fields%</div>
,并且会传递此格式而不是$this->getRowFormat()
。