【问题标题】:How to hide single labels on a symfony form?如何在 symfony 表单上隐藏单个标签?
【发布时间】:2009-12-15 08:03:14
【问题描述】:

我正在一个 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 个输入,但我只想为第二个元素添加一个标签。将第一个标签的标签设置为null'' 不会使symfony 不呈现此标签并显示此标签的默认文本。 (这意味着 for 输入标记为 crit_v_xx。)
有没有什么简单的方法可以隐藏特定的表单标签?

【问题讨论】:

    标签: php forms symfony1 label


    【解决方案1】:

    如果您将标签设置为 false,则 symfony 将根本不会呈现 <label> 标签。 False 的行为与 null 或 ''

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

    【讨论】:

      【解决方案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)) ?>
      

      【讨论】:

        【解决方案3】:

        你可以在 generator.yml 中禁用它

        filter:
          fields:
            name: { label: false }
        

        【讨论】:

          【解决方案4】:

          您可以创建自定义行格式来定义字段的呈现方式(如果您不使用自定义模板)。我在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__ 设置为那些不应呈现其标签的字段的标签。

          或者您甚至可以根据标签名称使用自定义行格式来防止输出标签的封闭标签。
          行格式看起来像这样 &lt;div &gt;%field%%help%%error%%hidden_fields%&lt;/div&gt; 并且会传递它而不是 $this-&gt;getRowFormat()

          【讨论】:

            【解决方案5】:

            将symfony表单中单个字段的标签设置为空白:

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

            它将渲染&lt;label&gt;标签,但里面有一个空格,所以它们不会在浏览器上输出任何东西

            【讨论】:

            • 对不起,我的意思是输入一个空格,如果你输入一个空字符串,它将不起作用(正如你已经知道的)。这样,它将呈现
            猜你喜欢
            • 2015-06-30
            • 2012-05-23
            • 2018-02-02
            • 1970-01-01
            • 2011-01-29
            • 1970-01-01
            • 2016-06-22
            • 2012-09-17
            • 2015-07-20
            相关资源
            最近更新 更多