2010-10-08 69 views
5

我有以下形式:Zend框架:填充DB數據Zend的形式下拉元素

<?php 
class Application_Form_RegistrationForm extends Zend_Form{ 

    public function init(){ 

     $country = $this->createElement('select', 'country'); 
     $country->setLabel('country: ') 
       ->setRequired(true); 


     $email = $this->createElement('text', 'email_address'); 
     $email->setLabel('Email Address: ') 
       ->setRequired(true); 

     $register = $this->createElement('submit', 'register'); 
     $register->setLabel('Create new Account') 
       ->setIgnore(true); 

     $this->addElements(array(
      $country, $email, $register 
     )); 




    } 

} 

?> 

的國家名單是存在於一個數據庫中的表country

無論如何,我可以使用數據庫中的國家名填充國家下拉列表嗎?

任何幫助表示讚賞。

感謝

回答

4

的最好方法是創建一個新的類元素:

把這個「/application/form/element/CountySelect.php」

class Application_Form_Element_CountrySelect extends Zend_Form_Element_Select { 
    public function init() { 
     $oCountryTb = new Application_Model_Country(); 
     $this->addMultiOption(0, 'Please select...'); 
     foreach ($oCountry->fetchAll() as $oCountry) { 
      $this->addMultiOption($oCountry['id'], $oCountry['name']); 
     } 
    } 
} 

然後將其添加到窗體這種方式:

class Application_Form_RegistrationForm extends Zend_Form{ 
    public function init() { 
     $this->addElement(new Application_Form_Element_CountrySelect('country_id')); 
    } 
} 
+0

非常感謝您的支持幫助 – Phantom007 2010-10-18 07:49:58

+1

,然後當這不起作用,因爲沒有解釋新的Application_Model_Country()... – 2013-01-28 01:14:22

9

你肯定能。

在init方法,你可以設定這樣的選項,假設$ DB是一個Zend_Db的適配器:

$options = $db->fetchPairs('SELECT id, name FROM country ORDER BY name ASC'); 
$country->setMultiOptions($options); 

如果您還沒有看到fetchPairs方法,構建了一個數組,第一列返回成爲鍵,第二列成爲值。

6

如果您的列表內容取決於某些條件,您可以通過控制器的操作(甚至在服務層,如果細緻的話)執行此操作。 用法:

$form->getElement('country')->addMultiOption('1','USA');  //add single value 
$form->getElement('country')->addMultiOptions(array('1'=>'USA', '2'=>'Canada'));  //add values by array 
$form->getElement('country')->setMultiOptions(array('1'=>'USA', '2'=>'Canada'));  //set values by array 

當然,添加從DB你需要先獲取它們的值。

有關更多可用方法,請參見http://framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.select

+1

+1,然而,事情在Zend的2。因此,你的最後一行將被改寫爲'$形式 - > GET( '國家')改變了一點點 - >的setValue(陣列( '1'=>'USA','2'=>'加拿大'));' – 2016-01-13 04:07:20