2009-12-15 57 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 }