如何隐藏symfony表单上的单个标签?

时间:2009-12-15 08:03:15

标签: php forms symfony1 label

我正在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。)
有没有简单的方法来隐藏特定的表单标签?

4 个答案:

答案 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()