2010-10-08 11 views
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

सबसे अच्छा तरीका तत्व के लिए एक नया वर्ग तैयार करना है इस तरह से:

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

आपके लिए बहुत धन्यवाद मदद – Phantom007

+1

और फिर जब यह काम नहीं करता है क्योंकि नए अनुप्रयोग_Model_Country() के लिए कोई स्पष्टीकरण नहीं है ... –

9

आप निश्चित रूप से कर सकते हैं।

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

मामले में आप fetchPairs विधि नहीं देखा है, यह एक सरणी बनाता है, जहां:

init विधि आप $ db संभालने कुछ इस तरह से विकल्प सेट कर सकते, एक Zend_Db एडाप्टर है पहला कॉलम रिटर्न कुंजी बन जाता है, और दूसरा कॉलम मान बन जाता है।

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 
बेशक

, डीबी से मानों आप उन्हें पहली लाने की जरूरत है जोड़ने के लिए।

अधिक विधियों के लिए http://framework.zend.com/manual/en/zend.form.standardElements.html#zend.form.standardElements.select देखें।

"/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']); 
     } 
    } 
} 

और फिर फ़ॉर्म में:

+1

+1, फिर भी, हालात में Zend 2. इस प्रकार में, अपने अंतिम पंक्ति '$ फार्म> प्राप्त ('देश') के रूप में लिखा हो जाएगा एक छोटा सा बदल -> setValue (सरणी ('1' => 'यूएसए', '2' => 'कनाडा')); –

संबंधित मुद्दे