【问题标题】:How to populate select element in zend 1.12 from db如何从 db 填充 zend 1.12 中的选择元素
【发布时间】:2017-08-10 20:15:55
【问题描述】:

我正在创建一个应用程序,我需要在其中从 db 表中填充 select 元素中的数据。 我需要从 db 填充用户角色 我的表单代码是

 $this->pass2->addValidator('Identical', false, array('token' => 'pass1'));
    $this->addElement('select', 'userrole', array(
        'class' => 'form-control',
        'required' => true,
        'multiOptions' => 
    ));

我应该如何处理多个选项? 有什么方法可以使用控制器从元素中的数据库加载数据,请帮助我 谢谢

【问题讨论】:

    标签: database zend-framework populate


    【解决方案1】:

    我过去所做的是将 db-adapter(或知道如何执行所需 db 查询的模型)作为构造函数参数传递给表单。

    类似这样的:

    class Application_Form_MyForm extends Zend_Form
    {
        protected $db;
    
        public function __construct($db)
        {
            $this->db = $db;
    
            // Don't forget to call the parent __construct. Ultimately
            // it is the parent __construct() that calls your init()
            // method that adds your elements 
            parent::__construct();
        }
    
        public function init()
        {
            // Create your form elements
            // $this->addElement('text', 'my_text_field'); // etc
    
            // Now your select field...
            $this->addElement('select', 'my_select', array(
                'multiOptions' => $this->buildMultiOptions(),
                'validators' => array(
                    // blah, blah
                ),
            );
        }
    
        protected function buildMultiOptions()
        {
            $select = $this->db->select()
                ->from('my_table', array(
                    'my_value_column', 
                    'my_display_column'
                ))
                ->order(array(
                    'my_display_column ASC',
                ));
            $results = $this->db->query($select)->fetchAll();
            $return = array();
            foreach ($results as $row) {
                $return[$row['my_value_column']] = $row['my_display_column'];
            }
            return $return;
        }
    }
    

    然后在控制器动作中,当你实例化你的表单时,你获取 db-adapter 并将它作为构造函数参数传递:

    $db = $this->getInvokeArg('bootstrap')->getResource('db');
    $form = new Application_Form_MyForm($db);
    
    // Then process your form as usual
    

    【讨论】:

      【解决方案2】:

      如果有必要填充表单类之外的选项。

      $form->getElement( 'ele_name' )
              ->setConfig(new Zend_Config( array(
                  'multiOptions' => array('option1','option2') )
              )));
      

      【讨论】:

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