如何将Zend_Db_Table_Row对象映射到Zend_Form_Element_Select选项(可选方式)


How to map Zend_Db_Table_Row object to Zend_Form_Element_Select options (optial way)

如何使用直接来自Zend_Db_Table_Row的选项填充Zend_Form_Element_Select?

例如:

    $select = new Zend_Form_Element_Select('user_id', array(
        'required'  => true
        ));
    // fetching users for select
    $userTable = new User_Model_DbTable_User();
    $users = $userTable->fetchAll();
    $select->addMultiOptions($users->toArray());

但这不会有什么好处。比方说,我想把对象id作为选项值,把一些对象属性作为选择标签。

我知道我可以运行foreach遍历行集并构造一个选项数组,但可能有某种映射函数?

您创建的任何映射函数都将迭代行集,因此您也可以简单地执行此操作,例如

foreach ($users as $user) {
    $select->addMultiOption($user->id, $user->someObjectProperty);
}

您还可以考虑剪裁一个模型方法,以返回您想要使用的数组。也许类似于:

public function fetchSelectList() {
        $resultSet = $this->fetchAll();
        $entries = array();
        foreach ($resultSet as $row) {
            $entry['id'] = $row->id;
            $entry['name'] = $row->name;
            $entries[] = $entry;
        }
        return $entries;
    }