2012-02-09 17 views
9

Jak utworzyć dwa przyciski opcji z jednym wstępnie wybranym na podstawie wartości $ foo? Poniższy fragment tworzy je dobrze, ale nie wybiera żadnego z dwóch przycisków.CakePHP tworzenie przycisków radiowych

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

Odpowiedz

23

To proste .. używać wartości domyślnej do $ foo:

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

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

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

Jak widać na dokumentacji:

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

+0

a) używa 1.3 - b) ta odpowiedź niszczy ideę "form trwałych". Wypróbuj sam. opublikuj ten formularz i przekonaj się sam. jeśli cokolwiek, możesz użyć parametru formularza "default" zamiast "value". – mark

+0

Potwierdzam "domyślne" prace, tak samo jak "wartość". – stef

+0

wartość = zawsze ta sama wartość - domyślnie = po zaksięgowaniu i unieważnia formularz zachowuje wcześniej wybraną wartość (pomimo innej wartości domyślnej).dlatego należy używać tylko wartości domyślnej. – mark

3

należy wstępnie wybrać wartość dla każdego pola formularza z kontrolera

@see http://www.dereuromark.de/2010/06/23/working-with-forms/ "wartościami domyślnymi"

+0

Niestety nie widzę w jaki sposób linkujące rozwiązuje problem. – stef

+0

cóż, wszystko to zostało przygotowane dla ciebie na piśmie: w bloku ELSE w twoim zestawie akcji: $ this-> data [Model] [pole] = defaultvalue (w twoim przypadku albo "standard", albo "pro"). i proszę podać swoją wersję cakephp w następnym pytaniu! ponieważ dla wersji 2.0 będzie to $ this-> request-> data - ale nie znając wersji, której używasz, trudno jest podać dokładne rozwiązanie. – mark

+0

Więc mogę tylko wybrać przycisk radiowy, umieszczając kod w kontrolerze, podczas gdy rzeczywisty znacznik do generowania radia jest w widoku? Używam 1.3 – stef

1

Jest to droga

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

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

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

lepsze rozwiązanie jest ustawienie wartości domyślnych w sterowniku, jak wskazał Mark. W ten sposób można ustawić wartości domyślne na końcu działania kontroler jak ...

Załóżmy model jest Member z membership_type field

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

Nie zgadzam się. wartości domyślne dla pól, które mogą mieć więcej niż jeden stan, są częścią logiki i powinny być dostarczane z kontrolera (twoje rozwiązanie wydaje się być narzutem i prawdopodobnie również zepsuje się niepowodzenie sprawdzania poprawności). jedyny przypadek użycia, w którym poziom widoku jest odpowiedni: jeśli wartość domyślna/wartość jest ustalona na określoną wartość (zawsze pozostaje taka sama). – mark

+0

Tak, oczywiście, lepszy sposób to zrobić w kontrolerze. ale jest to tylko możliwe rozwiązanie, ponieważ OP nie zapytał, której metody metody użyć. Zaktualizowałem post, dziękuję za wskazanie. – 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

Po prostu w heads-upie, w CakePHP 2.x Nie jestem pewien, czy ta składnia nadal działa. Tylko szefowie wszystkich, którzy przychodzą na to pytanie. – usumoio

Powiązane problemy