【问题标题】:Zend Framework: Populating DB data to a Zend Form dropdown elementZend Framework:将 DB 数据填充到 Zend Form 下拉元素
【发布时间】:2011-04-22 21:01:15
【问题描述】:

我有以下表格:

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

我可以用数据库中的国家名称填充国家下拉列表吗?

感谢任何帮助。

谢谢

【问题讨论】:

    标签: database zend-framework zend-form populate


    【解决方案1】:

    最好的方法是为元素创建一个新类:

    把这个放在“/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'));
        }
    }
    

    【讨论】:

    • 然后当这不起作用时,因为没有对新的 Application_Model_Country() 的解释......
    【解决方案2】:

    如果您的列表内容取决于某些条件,您可以通过控制器的操作(甚至在服务层中,如果要细致的话)来完成。 用法:

    $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
    

    当然,要从数据库中添加值,您需要先获取它们。

    有关更多可用方法,请参阅http://framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.select

    【讨论】:

    • +1,然而,在 Zend 2 中,事情发生了一些变化。因此,您的最后一行将被重写为 $form-&gt;get('country')-&gt;setValue(array('1'=&gt;'USA', '2'=&gt;'Canada'));
    【解决方案3】:

    你当然可以。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2011-01-29
      • 1970-01-01
      相关资源
      最近更新 更多