2012-02-09 15 views
9

¿Cómo puedo crear dos botones de opción con uno preseleccionado en función del valor de $ foo? El siguiente fragmento los crea bien, pero no selecciona ninguno de los dos botones.CakePHP crear botones de radio

$options = array('standard' => ' Standard','pro' => ' Pro'); 
$attributes = array(
    'legend' => false, 
    'value' => false, 
    'checked'=> ($foo == "pro") ? FALSE : TRUE, 
); 
echo $this->Form->radio('type',$options, $attributes); 

Respuesta

23

Es simple .. utilizar el valor por defecto a $ foo:

$options = array(
    'standard' => 'Standard', 
    'pro' => 'Pro' 
); 

$attributes = array(
    'legend' => false, 
    'value' => $foo 
); 

echo $this->Form->radio('type', $options, $attributes); 

Como se puede ver en la documentación:

http://book.cakephp.org/2.0/en/core-libraries/helpers/form.html#FormHelper::radio

+0

a) está usando 1.3 - b) esta respuesta está destruyendo la idea de "formas persistentes". pruébalo tú mismo. publique este formulario y compruébelo usted mismo. en todo caso, puede usar el parámetro de forma "predeterminado" en lugar de "valor". – mark

+0

Confirmo que funciona "predeterminado", también lo hace el "valor". – stef

+0

value = always the same value - default = una vez que se publica e invalida el formulario conserva el valor previamente seleccionado (a pesar de tener un valor predeterminado diferente).por eso solo debe usarse el predeterminado. – mark

3

debe preseleccionar el valor de cualquier campo de formulario desde el controlador

@see http://www.dereuromark.de/2010/06/23/working-with-forms/ "Valores predeterminados"

+0

Lo sentimos, no veo la forma en que enlazan resuelve el problema. – stef

+0

, todo está dispuesto para usted allí por escrito: en el bloque ELSE en su conjunto de acciones: $ this-> data [Model] [field] = defaultvalue (en su caso, ya sea 'estándar' o 'pro'). ¡y mencione su versión de cakephp en su próxima pregunta! porque para 2.0 sería $ this-> request-> data, pero sin conocer la versión que está utilizando es difícil proporcionarle una solución exacta. – mark

+0

¿De modo que solo puedo preseleccionar un botón de opción poniendo código en el controlador, mientras que el marcado real para generar la radio está en la vista? Estoy usando 1.3 – stef

1

Este es el camino a seguir

$attributes = array(); 
    $options = array('standard' => 'Standard', 'pro' => 'Pro'); 

    if($foo === 'pro') { 
     $attributes['default'] = 'pro'; 
    } 

    echo $this->Form->radio('type', $options, $attributes); 

una solución mejor es establecer los valores predeterminados en el controlador como Mark señaló. De esta manera se puede establecer por defecto al final de la acción de su controlador como ...

Supongamos que su modelo es Member con membership_type field

$this->data['Member']['membership_type '] = 'pro'; 
+0

estoy en desacuerdo. los valores predeterminados para los campos que pueden tener más de un estado son parte de la lógica y deben proporcionarse desde el controlador (su solución parece una sobrecarga y probablemente también falle en la validación). el único caso de uso donde el nivel de vista es apropiado: si el valor predeterminado/está fijado a un valor específico (siempre permanece igual). – mark

+0

Sí, obviamente, la mejor manera de hacerlo es en el controlador. pero esta es solo una solución posible ya que OP no preguntó qué método de método usar. He actualizado la publicación, gracias por señalar. – Ehtesham

0
$options = array('Y'=>'Yes','N'=>'No'); 

$attributes = array('div' => 'input', 'type' => 'radio', 'options' => $options, 'default' => 'Y'); 

echo $this->Form->input('add to business directory',$attributes); 

HTH

+0

Solo un aviso, en CakePHP 2.x no estoy seguro de que esta sintaxis funcione. Solo un aviso de cualquiera que llegue a esta pregunta. – usumoio

Cuestiones relacionadas