2012-09-13 64 views
0

在Zend我有一個由兩個文本字段和一個複選框組成的自定義複合元素。如何填充Zend自定義複合元素中的複選框?

這是視圖助手:

<?php 
class My_View_Helper_WorkplaceFactor extends Zend_View_Helper_FormElement{ 

protected $html = ''; 

public function workplaceFactor($name, $value = null, $attribs = null){ 
    $this->html = ''; 
    $factor = $applies = $note = ''; 
    if($value){ 
     $factor = $value['factor']; 
     $applies = $value['applies']; 
     $note = $value['note']; 
    } 

    $helperText = new Zend_View_Helper_FormText(); 
    $helperText->setView($this->view); 
    $helperCheckbox = new Zend_View_Helper_FormCheckbox(); 
    $helperCheckbox->setView($this->view); 

    $checked = 0; 
    if($applies == "1"){ 
     $checked = 1; 
    } 

    $this->html .= '<td><label for="' . $name . '[factor]">Faktor</label></td><td>' . $helperText->formText($name . '[factor]', $factor) . '</td>'; 
    $this->html .= '<td><label for="' . $name . '[applies]">Platí</label></td><td>' . $helperCheckbox->formCheckbox($name . '[applies]', $applies, array('checked' => $checked)) . '</td>'; 
    $this->html .= '<td><label for="' . $name . '[note]">Poznámka</label></td><td>' . $helperText->formText($name . '[note]', $note) . '</td>'; 

    return $this->html; 
} 

}

我的問題是填充複選框,當窗體是無效的,並重新加載自身。當我檢查複選框並重新加載時,沒關係,它會填充。當我取消選中選中的項目時,也可以在重新加載時正確顯示。但是當我想檢查複選框後頁面已被重新加載,檢查值甚至不是在發佈請求,因此它不起作用。

元素的標記如下:

<tr id="factor1"> 
<td><label for="factor1[factor]">Faktor</label></td><td><input type="text" name="factor1[factor]" id="factor1-factor" value="Prach" /></td> 
<td><label for="factor1[applies]">Platí</label></td><td><input type="hidden" name="factor1[applies]" value="0" /><input type="checkbox" name="factor1[applies]" id="factor1-applies" value="0" /></td> 
<td><label for="factor1[note]">Poznámka</label></td><td><input type="text" name="factor1[note]" id="factor1-note" value="" /></td></tr> 

我身邊有計算器徘徊,我認爲這個問題是該複選框名稱中的[],但如果我不把它們放在那裏, 'apply'複選框值不屬於'factor'值數組,因此它根本不會填充。你有什麼想法如何找到這個魔術圈的方式?

回答

0

好了,所以我的朋友的幫助,這個答案https://stackoverflow.com/a/9225535/1322246我修改助手是這樣的:

... 
    $checked = isset($value['applies']) && $value['applies']; 

    $this->html .= '<td><label for="' . $name . '[factor]">Faktor</label></td><td>' . $helperText->formText($name . '[factor]', $factor) . '</td>'; 
    $this->html .= '<td><label for="' . $name . '[applies]">Platí</label></td><td>' . $helperCheckbox->formCheckbox($name . '[applies]', $applies, array('value' => 1, 'checked' => $checked), array(1, null)) . '</td>'; 
    $this->html .= '<td><label for="' . $name . '[note]">Poznámka</label></td><td>' . $helperText->formText($name . '[note]', $note) . '</td>'; 

... 

}

因此,換句話說,我必須設置的CheckedValue和uncheckedValue爲Zend的複選框視圖助手。現在它可以工作。