2012-08-01 20 views
6

sto usando l'helper Form per generare un'etichetta:Cake PHP 2 Form- personalizzato> Label

$this->Form->label('Contact.name', 'Name'); 

che genera i seguenti:

<label for="ContactName">Name</label> 

E 'possibile generare il seguente utilizzando l'helper:

<label for="ContactName"><span class="mandatory">*</span> Name</label> 

mentre io in grado di scrivere manualmente il codice HTML per il sopra diventa un po 'più difficile quando sto usando il metodo di input in cui viene generata automaticamente un'etichetta.

Ad esempio:

$this->Form->input('Contact.forename',array('div' =>false, 
        'label' => array(
        text'=> 'First Name',class =>'myclass'), 
        'class' => 'input','size' => '25' ,'tabindex' => '1')); 

Questo è possibile in torta o devo iniettare manualmente l'HTML utilizzando JavaScript quando la pagina viene caricata? Quale penserei è piuttosto brutto.

risposta

8

Se si utilizza la validazione dei modelli per i campi obbligatori, CakePHP applica automaticamente '*' sull'etichetta altro si può usare l'helper i seguenti-

echo $this->Form->label('name', '<span class="mandatory">*</span> Name'); 

Se non si desidera che le etichette per generare automaticamente puoi usare "label => false" mentre usi l'helper.

echo $this->Form->input('Contact.forename',array('label' =>false)); 
+0

Mille grazie. Ho finito per utilizzare entrambi, poiché ho riscontrato che gli errori di convalida del modulo vengono visualizzati solo quando si utilizza form-> input e non quando si utilizza form-> text. $ this-> Form-> label ('Contact.forename', ' * Nome'); e $ this-> Form-> input ('Contact.forename', array ('div' => false, 'label' => false, 'class' => 'input', 'size' => '25', 'tabindex' => '2')); ottimo lavoro :-). – Bear

4

Non sono sicuro che CakePHP lo supporti (e sarebbe comunque un po 'complicato). La soluzione più semplice che posso pensare è quello di assegnare una classe di "obbligatoria" per l'etichetta tramite il modulo di aiutante:

$this->Form->label('User.name', 'Your username', array('class'=>'mandatory')); 

che produce qualcosa di simile:

<label class="mandatory" for="ContactName">Name</label> 

Poi il resto è fatto puramente in CSS :

label.mandatory:after { 
    content: ' *'; 
    color: red; 
    display: inline; 
} 

Evita HTML aggiuntivo.

+0

Mille grazie per la risposta, non ho pensato di farlo in questo modo. L'unico lato negativo che vedo è che devo creare diverse classi per i diversi contenuti. Considera se volevo (se applicabile) come contenuto. – Bear

0

si può fare semplice da

echo $this->Form->input('whatever', array('between'=>'<label for="ContactName"><span class="mandatory">*</span> Name</label>','label'=>false)); 
1

So che questo è vecchio, ma forse qualcuno con CakePHP 3 sta avendo lo stesso problema. Questo è ciò che ha risolto per me, senza alcun inlinecode.

<?php 
echo $this->Form->input(
'renovate_old', 
[ 
'type' => 'checkbox', 
'label' => ['text' => __('Alte Wohnung'), 'class' => 'moCheckLabel'] 
]); ?> 

Quindi è possibile assegnare un nome all'etichetta e utilizzare il Databasefield per scrivere.