Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Zend Framework: Populating DB data to a Zend Form dropdown element

I have the following form:

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




    }

}

?>

The list of the countries are present in a table country in a database.

Is there anyway I can populate the country dropdown list with the country names from the database?

Any help is appreciated.

Thanks

like image 570
Phantom007 Avatar asked Oct 08 '10 12:10

Phantom007


2 Answers

You sure can.

In the init method you can set the options with something like this, assuming $db is a Zend_Db adapter:

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

In case you haven't seen the fetchPairs method, it builds an array, where the first column return becomes the key, and the second column the value.

like image 159
David Snabel-Caunt Avatar answered Oct 27 '22 01:10

David Snabel-Caunt


You could do it from controller's action (or even in Service Layer, if to be meticulous), if your list's content depends from some conditions. Usage:

$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

Of course, to add values from DB you need to fetch them first.

See http://framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.select for more methods available.

like image 30
BasTaller Avatar answered Oct 27 '22 01:10

BasTaller