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