2012-08-01 4 views
6

ich das Formular Helfer bin mit einem Etikett zu erzeugen:Cake PHP 2 benutzerdefinierte form-> Label-

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

Welche der folgenden erzeugt:

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

Ist es möglich, die folgende Verwendung zu erzeugen, der Helfer:

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

Während ich die html manuell schreiben kann für die oben es ein wenig schwieriger, wenn ich verwende die Eingabemethode, bei der ein Label automatisch generiert wird.

Zum Beispiel:

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

Ist das möglich in Kuchen oder muss ich manuell die HTML injizieren Sie Javascript verwenden, wenn die Seite geladen wird? Was ich denke, ist ziemlich hässlich.

Antwort

8

Wenn Sie Modellvalidierung für die Pflichtfelder verwenden, dann CakePHP automatisch gilt ‚*‘ auf dem Etikett sonst kann man den Helfer als folgt-

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

verwenden Wenn Sie die Etiketten nicht wollen, zu generieren Automatisch können Sie "label => false" verwenden, während Sie den Helfer benutzen.

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

Vielen Dank. Ich habe beide verwendet, da ich fand, dass meine Formularvalidierungsfehler nur angezeigt werden, wenn form-> input verwendet wird und nicht, wenn form-> text verwendet wird. $ this-> Form-> label ('Contact.forename', ' * Name'); und $ this-> Form-> input ('Contact.forename', array ('div' => falsch, 'label' => false, 'class' => 'input', 'size' => '25', 'tabindex' => '2')); funktioniert super :-). – Bear

4

Nicht sicher, dass CakePHP das unterstützt (und es würde sowieso ein bisschen unordentlich werden). Die einfachste Lösung, die ich denken kann, ist eine „obligatorische“ Klasse auf das Etikett über das Formular Helfer zuweisen:

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

die so etwas wie produziert: der Rest rein in CSS erfolgt

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

Dann :

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

Vermeidet jede zusätzliche HTML.

+0

Vielen Dank für die Antwort, nicht gedacht, es so zu machen. Der einzige Nachteil, den ich sehe, ist, dass ich mehrere Klassen für den unterschiedlichen Inhalt erstellen muss. Überlegen Sie, ob ich (falls zutreffend) als Inhalt haben wollte. – Bear

0

Sie können es einfach tun, indem

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

Ich weiß, das alt ist, aber vielleicht jemand mit CakePHP 3 ist das gleiche Problem. Das ist es, was es für mich ohne Inline-Code behoben hat.

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

So können Sie Ihr Etikett benennen und das Datenbankfeld verwenden, um zu schreiben.