web-dev-qa-db-fra.com

Comment ajouter des attributs à une étiquette générée avec Zend/Form dans Zend Framework 2

J'ajoute des formulaires à ma page en utilisant Zend/Form.

J'ajoute des éléments en les définissant comme suit: 

    $this->add(array(
            'name' => 'value',
            'attributes' => array(
                    'type'  => 'text',
                    'id' => 'value',
                    'autocomplete' => 'off',
                    'placeholder' => 'Cost',
            ),
            'options' => array(
                    'label' => 'Cost',
            ),
    ));

Comme vous pouvez le constater, il existe un nœud 'label' => 'cost', ce qui a généré une étiquette associée à l'élément input. 

Comment ajouter des classes, des attributs à cette étiquette? 

23
El Dorado

S'il vous plaît essayez ceci, je n'ai pas testé ou utilisé cela, mais aller par la source devrait fonctionner correctement:

$this->add(array(
    'name'       => 'value',
    'attributes' => array(),
    'options'    => array(
        'label_attributes' => array(
            'class'  => 'mycss classes'
        ),
        // more options
    ),        
));

Si cela ne fonctionne pas, laissez-moi s'il vous plaît un commentaire. Si cela ne fonctionne pas, il n’est pas possible d’utiliser cette approche car la FormLabel restreint un peu la validAttributes:

protected $validTagAttributes = array(
    'for'  => true,
    'form' => true,
);
48
Sam

Cela fonctionne bien dans Zend Framework 2.3:

$this->add(array(
  'name' => 'userName',
  'attributes' => array(
      'type'  => 'text',
      'class' => 'form-control',
      'placeholder' =>'Username',
  ),
  'options' => array(
      'label' => 'Username',
      'label_attributes' => array('class' => 'control-label')
  ),

));
1
speedy32

Pour une approche programmatique sur ZF2 +, essayez ceci:

$element->setOptions(array(
    'label_attributes' => array(
        'style' => 'color:gray;'
    )
));

Inspiré par la réponse de Damon.

0
Dennis
$element->setOptions(array('label_class' => array('class' => 'control-label')));

Produit le code comme ceci:

<label class="control-label">
  <input type="radio" name="option1" id="option1" value="1">
  Option 1
</label>
<label class="control-label">
  <input type="radio" name="option2" id="option2" value="2">
  Option 2
</label>

J'ai essayé ça. Cela fonctionne dans Zend Framework One. 

Notez si vous utilisez 

$ element-> setOptions (array ('label_attributes' => array ('class' => 'control-label')));

vous obtenez l'effet indésirable pour une raison quelconque de 

<label attributes="control-label">
  <input type="radio" name="option1" id="option1" value="1">
  Option 1
</label>
0
Damon Hogan