2009-12-15 6 views
2

Je crée une forme très personnalisée sur un projet symfony et actuellement je quelque chose comme ceci:Comment masquer des étiquettes uniques sur un formulaire 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'))); 
    } 

Comme vous pouvez le voir, j'ai 2 entrées élément foreach, mais je veux seulement avoir une étiquette pour la deuxième un. Définir l'étiquette pour le premier à null ou à '' ne fait pas symfony pour ne pas rendre cette étiquette et affiche le texte par défaut pour cette étiquette. (Cela signifie que l'entrée for est libellée crit_v_xx.)
Existe-t-il un moyen simple de masquer des étiquettes de formulaire spécifiques?

Répondre

2

J'ai fini avec les éléments suivants:

Je fais un séparé fichier modèle appelé _form.php qui ressemblait à ceci:

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

Dans le modèle principal de cette action, j'inclus la forme comme ceci:

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

Pour définir l'étiquette d'un champ unique sous forme de symfony vide:

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

Il va rendre les <label> balises, mais avec un espace vide à l'intérieur, de sorte qu'ils ne rien afficher sur le navigateur

+0

Ce sont les deux lignes de la version de code de ce que j'ai écrit ci-dessus ... – TheHippo

+1

Désolé Je voulais taper un espace vide, si vous mettez une chaîne vide cela ne fonctionnera pas (comme vous le savez déjà). De cette façon, les balises

+0

mais ce stills rend l'étiquette d'étiquette ... – TheHippo

0

Vous pouvez créer un format de ligne personnalisé qui définit la manière dont les champs seront rendus (si vous n'utilisez pas de modèle personnalisé de toute façon). Je l'ai trouvé dans ce forum thread.

Une bonne solution peut être redéfinissant la méthode 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, 
     )); 
    } 
} 

Ensuite, vous définissez __UNSET__ comme étiquette pour les champs qui ne devrait pas avoir leur label rendus.

Ou vous utilisez même un format de ligne personnalisé en fonction du nom de l'étiquette pour empêcher la sortie de l'étiquette de l'étiquette.
Un format de ligne ressemblerait à ceci <div >%field%%help%%error%%hidden_fields%</div> et passerait ceci au lieu de $this->getRowFormat().

+0

J'ai vu cet article aussi, j'espérais trouver quelque chose de plus facile. .. – TheHippo

6

Si vous définissez l'étiquette sur false, symfony ne restitue pas les balises <label>. Faux se comporte différemment alors nul ou « »

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

Vous pouvez tout simplement désactiver dans le generator.yml

filter: 
    fields: 
    name: { label: false }