0

我需要将多选项插入下拉列表,从我的数据库中的表中获取选项。我创建了如下元素:

    $this->add(array(
        'name'       => 'company',
        'type'       => 'Zend\Form\Element\Select',
        //'multiOptions'=> $options,
        'options'    => array(
            'label'        => 'Company',
        ),
        'attributes' => array(
            'style'  => "float:right;",
        ),          
    )); 

我想从下拉列表中选择数据库表中的一些值。例如,我有实体联系人,我需要为联系人选择数据库中名为公司的表中的公司。

在阅读了 zend 框架的网站后,我尝试使用以下代码:

$params = array(
           'driver'=>'Pdo_Mysql',
           'host'=>'localhost',
           'username'=>'root',
           'password'=>'',
           'dbname'  =>'myDataBase'
            );

$db = new \Zend\Db\Adapter\Adapter($params);
$sql= new Sql($db);

$select = $sql->select();
$select ->from('companies')
    ->columns(array('id','company_name'))
    ->order(" 'company_name' ASC");

我还在其他一些可以使用函数的网站上阅读:

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

但它似乎在 Zend Framework 2 中不再存在。

请各位,帮我一把。如果代码不好并且您有更好的主意,请告诉我。

提前致谢!

4

2 回答 2

0

这只是一个快速而肮脏的答案,但我想它可以让你开始。

  1. 创建一个ServiceFactory,这应该在单独的工厂类而不是闭包中完成,但我仍然使用闭包 - 更快地编写;)
  2. 从 获取配置,ServiceLocator以便您可以访问 DB-Params
  3. 创建您的默认 SQL Stuff 以检索value_options
  4. value_options使用setValueOptions($valueOptions)给定表单元素的功能填充

模块.phpgetServiceConfig()

return array(
    'factories' => array(
        'my-form-factory' => function($serviceLocator) {
            $form   = new My\Form();
            $config = $serviceLocator->get('config');
            $db     = new \Zend\Db\Auth\Adapter\Adapter($config['dbParams']); //or whatever you named the array key

            $sql    = //do your SQL Stuff
            // This is a fake array, it should be your $sql result in the given format
            $result = array('value' => 'label', 'value2' => 'label2'); 

            $form->get('elementToPopulate')->setValueOptions($result);
            return $form;
        }
    )
);

SomeController.phpsomeAction()

$form = $this->getServiceLocator()->get('my-form-factory');

return new ViewModel(array(
    'form' => $form
));

我希望这能让你开始

于 2013-02-13T07:31:24.910 回答
0

您必须在控制器上添加该字段验证才能在其中设置值。

$select = $db->select()->where("state_code = ?",$arr["state_code"]);
$resultSet = $cityObj->fetchAll($select);
$cityArr = $resultSet->toArray();

$city_ar = array();
foreach($cityArr as $city){
    $city_ar[$city['id']] = $city['company'];
}
$form->company->setMultiOptions($city_ar);
$form->company->setValue($val["company"]);

通过使用此代码下拉国家/地区具有结果集数组($resultSet)中的值。

于 2013-02-13T10:43:31.433 回答