5

我有以下表格:

<?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

3 回答 3

9

你当然可以。

在 init 方法中,您可以使用类似这样的方式设置选项,假设 $db 是 Zend_Db 适配器:

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

如果您还没有看到 fetchPairs 方法,它会构建一个数组,其中第一列返回成为键,第二列成为值。

于 2010-10-11T22:26:26.723 回答
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

于 2010-10-14T08:17:07.540 回答
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'));
    }
}
于 2010-10-17T20:36:20.370 回答