2012-02-09 151 views
9

如何創建兩個單選按鈕,其中一個是基於$ foo的值預選的?下面的代碼片段可以創建它們,但不會選擇兩個按鈕中的任何一個。CakePHP創建單選按鈕

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

回答

23

很簡單..使用默認值$ foo的:

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

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

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

正如你可以在文檔上看到:

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

+0

a)他正在使用1.3 - b)這個答案正在破壞「持久化形式」的想法。自己嘗試一下。張貼這張表格並親自查看。如果有的話,你可以使用表單參數「default」而不是「value」。 – mark 2012-02-10 14:47:17

+0

我確認「默認」作品,「價值」也一樣。 – stef 2012-02-10 15:10:36

+0

value =始終是相同的值 - default =一旦發佈並且使表單失效,則保持先前選擇的值(儘管具有不同的默認值)。這就是爲什麼只應該使用默認值。 – mark 2012-02-10 20:36:08

3

你應該預選值任何形式的字段從控制器

@see http://www.dereuromark.de/2010/06/23/working-with-forms/ 「默認值」

+0

對不起,我沒有看到該鏈接是如何解決這個問題。 – stef 2012-02-09 11:09:26

+0

好吧,它的所有內容都以書面形式呈現給您:在您的動作集中的ELSE塊中:$ this-> data [Model] [field] = defaultvalue(在您的案例中爲'standard'或'pro')。並請在下一個問題中提及你的cakephp版本!因爲對於2.0而言,它會是$ this-> request-> data--但是不知道您正在使用的版本,因此很難爲您提供確切的解決方案。 – mark 2012-02-09 11:17:59

+0

所以我只能通過在控制器中放置代碼來預選一個單選按鈕,而生成無線電的實際標記在視圖中?我正在使用1.3 – stef 2012-02-10 14:14:30

1

這是去

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

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

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

更好的解決方式是在Mark指出的控制器中設置默認值。這樣,你可以在你的控制器的作用就像結束設置默認值...

讓我們假設你的模型是Membermembership_type field

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

我不同意。可以具有多個狀態的字段的默認值是邏輯的一部分,應該由控制器提供(您的解決方案看起來像開銷一樣,並且可能在驗證失敗時也會中斷)。唯一的視圖級別適用的用例:如果默認值/值固定爲特定值(始終保持不變)。 – mark 2012-02-09 14:28:24

+0

是的,顯然這樣做的更好方法是在控制器中。但這僅僅是一個可能的解決方案,因爲OP沒有詢問使用哪種方法。我已更新該帖子,謝謝指出。 – Ehtesham 2012-02-09 14:41:43

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

只是在CakePHP 2.x中,我不確定這種情況是否仍然有效。只是想到了這個問題的任何人。 – usumoio 2013-04-04 17:56:10