Как скрыть отдельные ярлыки в форме Symfony? - PullRequest
2 голосов
/ 15 декабря 2009

Я создаю очень индивидуальную форму для проекта 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.)
Есть ли простой способ скрыть определенные метки формы?

Ответы [ 5 ]

6 голосов
/ 13 января 2010

Если вы установите для метки значение false, Symfony не будет отображать теги <label>. False ведет себя иначе, чем null или ''

$your_form->widgetSchema->setLabel('the_field_id', false);
2 голосов
/ 20 декабря 2009

Я получил следующее:

Я делаю отдельный файл шаблона с именем _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 голос
/ 23 июня 2012

Вы можете просто отключить его в generator.yml

filter:
  fields:
    name: { label: false }
0 голосов
/ 15 декабря 2009

Вы можете создать собственный формат строки, который определяет способ визуализации полей (если вы все равно не используете пользовательский шаблон). Я нашел это в этой теме форума .

Хорошим решением может быть переопределение метода 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 голосов
/ 15 декабря 2009

Чтобы установить метку отдельного поля в форме Symfony как пустую:

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

Будет отображаться теги <label>, но с пустым пространством внутри, поэтому они ничего не выводят в браузере

...