Nasıl bir symfony form üzerinde tek etiketlerini gizlemek için?

5 Cevap php

Ben bir Symfony proje üzerinde çok özel bir form oluşturma ve şu anda böyle bir şey var:

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')));
    }

As you can see I have 2 inputs foreach element, but I only want to have a label for the second one. Setting the label for the first one to null or to '' does not make symfony to not render this label and displays the default text for this label. (This means the for input is labeled crit_v_xx.)
Is there any simple way to hide specific form labels?

5 Cevap

Ben aşağıdaki ile sona erdi:

Ben bu gibi görünüyordu _form.php hangi adında ayrı bir şablon dosyası yapmak:

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

Bu eylem için ana şablonunda böyle formu dahil:

<?php include_partial('form', array('form' => $form)) ?>

False etiketi ayarlarsanız daha sonra symfony hiç <label> etiketleri hale olmayacaktır. Yanlış davranır farklı sonra null veya''

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

Sadece generator.yml onu devre dışı bırakabilir

filter:
  fields:
    name: { label: false }

Sen (siz zaten özel bir şablonu kullanarak değilse) alanları hale nasıl tanımlayan özel bir satır biçimi oluşturabilirsiniz. Ben bu forum thread buldum.

İyi bir çözüm formatRow yöntemi geçersiz olabilir:

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,
		));
    }
}

Sonra __UNSET__ kendi etiket hale olmamalıdır alanlar için etiket olarak ayarlayın.

Or you even use a custom row format depending on the label name to prevent outputting the enclosing tag of the label.
A row format would look like this <div >%field%%help%%error%%hidden_fields%</div> and would pass this instead of $this->getRowFormat().

Boş bir symfony biçimde tek bir alanın etiketini ayarlamak için:

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

Bu <label> etiketleri işlemek, ama içinde bir boşluk ile, böylece tarayıcıda onlar çıkışı olmaz bir şey olacak