如何在db中填充zend 1.12中的select元素

时间:2015-12-30 01:47:52

标签: database zend-framework populate

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

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

我应该怎样处理多种选择? 有没有办法使用控制器从元素中的db加载数据,请帮助 谢谢

2 个答案:

答案 0 :(得分:0)

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

这样的事情:

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

答案 1 :(得分:0)

on case with是表格类之外的必要填充选项。

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