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メソッドを見たことがない場合は、配列を作成します。最初の列の戻り値がキーになり、2番目の列が値になります。

于 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 に答える