2012-08-01 14 views
6

estoy usando el Formulario de ayuda para generar una etiqueta:PHP Cake 2 personalizada form-> Etiqueta

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

que genera los siguientes:

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

¿Es posible generar el siguiente usando el ayudante:

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

Mientras me puede escribir manualmente el código hTML de lo anterior se vuelve un poco más difícil cuando estoy usando el método de entrada donde se genera automáticamente una etiqueta.

Por ejemplo:

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

Es esto posible en torta o tengo que inyectar manualmente el código HTML usando JavaScript cuando se carga la página? Lo cual yo pensaría que es bastante feo.

Respuesta

8

Si está utilizando la validación de modelos para los campos obligatorios, CakePHP automáticamente aplica '*' en la Etiqueta cosa que se pueda utilizar al ayudante como sigue-

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

Si no desea que las etiquetas se generan automáticamente puede usar "label => false" mientras usa el helper.

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

Muchas gracias. Terminé usando ambos, ya que encontré que los errores de validación de formularios solo se muestran cuando se usa form-> input y no cuando se usa form-> text. $ this-> Form-> label ('Contact.forename', ' * Name'); y $ this-> Form-> input ('Contact.forename', array ('div' => false, 'label' => false, 'class' => 'input', 'size' => '25', 'tabindex' => '2')); funciona bien :-). – Bear

4

No estoy seguro de que CakePHP admita eso (y de todos modos se volvería un poco complicado). La solución más simple que puedo pensar es asignar una clase de "obligatoria" a la etiqueta a través del asistente de formulario:

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

que produce algo así como:

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

A continuación, el resto se hace exclusivamente en CSS :

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

Evita tener HTML adicional.

+0

Muchas gracias por la respuesta, no se piensa que lo haga de esta manera. El único inconveniente que veo es que tengo que crear varias clases para el contenido diferente. Considere si quería (si corresponde) como el contenido. – Bear

0

que puede hacer que sea sencillo por

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

Sé que esto es viejo, pero tal vez alguien con Cakephp 3 está teniendo el mismo problema. Esto es lo que me solucionó, sin ningún código en línea.

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

Así puede nombrar su etiqueta y usar el campo de base de datos para escribir.

Cuestiones relacionadas