ZF3 - 填充从数据库中选择

时间:2018-04-02 10:11:13

标签: database select zend-framework zend-framework3

我正在使用Zend Framework 3做一些工作,我需要在表单中显示一个select填充了数据库中的选项。我正在使用Zend Tutorial博客部分中使用的SQL Abstraction。这个想法是显示已经构建的表单,并添加一个简单的选择与从不同的表返回的数据,所有表单都使用users表(具有国家ID),我想将该ID链接到正确的表格,然后显示选择中的所有国家..

谢谢大家。

1 个答案:

答案 0 :(得分:1)

您将为表单编写工厂。选择该工厂中的数据,然后通过construct或某种set方法传递给表单,并将该数据用作值选项。

class MyFormFactory implements FactoryInterface {
    public function __invoke($container, $options) {
         $data = []; // call repository via $container and fetch your data
         $form = new MyForm();

         $form->setCountries($data);

         return $form;
    }
}

class MyForm extends \Zend\Form\Form {
    private $countries = [];

    public function setCountries(array $countries) {
         $this->countries = $countries;
    }

    public function init(){
         $this->add([
             'type' => Select::class,
             'name' => 'countries',
             'options' => [
                  'label' => 'Countries',
                  'value_options' => $this->countries
             ]
         ]);
    }
}

并将您的表单置于config

中的工厂键下
return [
     'form_elements' => [
          'factories' => [
              MyForm::class => MyFormFactory::class
          ]
     ]
];

现在,当您通过FormElementManager调用表单时,您的工厂将触发,它将调用存储库并获取数据,并将其传递给您的表单。

不要忘记在模块配置中添加Zend\Form

这种方法适用于zf3。