2011-03-25 51 views
2

作爲ZF: how to check GET request?的補充。ZF:GET參數複製

我有兩個輸入欄和一個複選框。表格是標準的。

public function init() 
{ 
    $this->setMethod('GET'); 

    $new = new Zend_Form_Element_Checkbox('new'); 
    $new->setLabel('New') 
     ->setOrder(3); 

    $app = new Zend_Form_Element_Select('app'); 
    $app->setLabel('System') 
      ->setOrder(2) 
      ->setRequired() 
      ->addMultiOptions(array('0' => ' ----------- ') + $applications); 

    $cat = new Zend_Form_Element_Select('cat'); 
    $cat->setLabel('Theme') 
      ->setOrder(1) 
      ->setRequired() 
      ->addMultiOptions(array('0' => ' ----------- ') + $categories); 

    $submit = new Zend_Form_Element_Submit('submit'); 
    $submit->setLabel('Search') 
      ->setOrder(4); 

    $this->addElements(array(
     $cat, $app, $new, $submit 
    )); 
} 

1)我不提交新的地方是0:http://site.com/?cat=0&app=0&new=0

2)我不提交新的地方爲1:http://site.com/?cat=0&app=0&new=0&new=1

爲什麼新的領域有重複的呢?我會很好,如果新= 0缺席,如果新= 1

回答

5

我認爲這是因爲Zend_From創建一個隱藏的輸入框旁邊的複選框。這是因爲當複選框沒有被選中時,根據定義,沒有與複選框關聯的值被髮送到服務器。所以Zend_Form創建隱藏的字段,以便在複選框未選中的情況下發送一些內容。然而,缺點是當選中複選框時,會發送兩個值,即隱藏的值和複選框的實際值。

+0

謝謝。是否有可能隱藏新= 0? – Anthony 2011-03-25 15:01:27

+0

@Anthony。我相信Zend_Form總是爲複選框創建這個隱藏字段(除非複選框被禁用)。所以,我唯一想到的就是試圖用JS來操縱表單。您可以在複選框被選中時刪除隱藏字段,並在沒有時添加它。或者使用POST提交表單。 – Marcin 2011-03-25 15:12:20

+0

不幸的是我只需要GET請求。可能會讓自己的zend_view_form組件在哪裏構建GET url?但我不知道它在哪裏形成:( – Anthony 2011-03-25 15:23:46

2

你爲什麼在意?它應該工作得很好?

如果因任何原因做護理,你可以創建My_View_Helper_MyCheckbox不會創建隱藏的元素,併爲其分配(容易,沒有雜耍問心無愧Zend_View_Helper的前綴)是這樣的:

$decorators = $form->new->getDecorators(); 
//see which key is ViewHelper and assing it to $key variable 
$decorators[$key] = new My_View_Helper_MyCheckbox(); 
$form->new->setDecorators($decorators); 

但要注意,可以帶來一些複雜性 - 比如複選框可能不會驗證未經檢查的狀態,現在還有許多其他缺陷甚至無法想到。因此,考慮明智;)

希望它幫助;)

+0

感謝您的評論。 Marcin的意思是一樣:)無論如何,我創建了自己的幫手,它完美的作品!:) – Anthony 2011-03-25 21:30:14

+0

是的,他的確如此。我只是想添加代碼,如何輕鬆地更改視圖助手。而且評論太長了。另一種選擇(手冊中建議的)有點兒長久,對於我猜測的這個任務來說太過矯枉過正;) – 2011-03-26 13:40:49