2009-12-15 35 views
2

我在symfony项目创造一个非常自定义表单,目前我有这样的事情:如何隐藏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不呈现此标签并显示此标签的默认文本。 (这意味着输入标记为crit_v_xx。)
是否有任何简单的方法来隐藏特定的表单标签?

回答

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)) ?> 
0

要设置单个字段的标签在symfony的形式空白:

$your_form->widgetSchema->setLabel('the_field_id', ' '); 

这将使<label>标签,但里面一片空白,所以他们会在浏览器上正常输出

+0

这是什么,我已经上面写的代码版本的两行... – TheHippo 2009-12-15 09:55:39

+1

对不起我打算输入一个空格,如果你输入一个空字符串,它将不起作用(正如你已经知道的)。这样,它会渲染

+0

,但这仍然呈现标签标签... – TheHippo 2009-12-15 18:44:04

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

+0

我也看过这篇文章,我希望找到更容易的东西。 .. – TheHippo 2009-12-15 09:56:20

6

如果您将标签设置为false,则symfony根本不会呈现<label>标签。假行为不同,然后空或'

$your_form->widgetSchema->setLabel('the_field_id', false); 
1

你可以只禁用它在generator.yml

filter: 
    fields: 
    name: { label: false }