【问题标题】:ZF3 - Populate Select from DatabaseZF3 - 从数据库中填充选择
【发布时间】:2018-09-11 13:17:18
【问题描述】:

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

谢谢大家。

【问题讨论】:

    标签: database select zend-framework zend-framework3


    【解决方案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
                 ]
             ]);
        }
    }
    

    并将您的表单放在配置中的工厂键下

    return [
         'form_elements' => [
              'factories' => [
                  MyForm::class => MyFormFactory::class
              ]
         ]
    ];
    

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

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

    这种方法适用于 zf3。

    【讨论】:

    • 我无法让它工作。我们可以通过电子邮件联系吗?谢谢。
    • 我正在使用两个不同的表格。用户和国家,这就是为什么我不能让它工作:/
    • 没关系。您在工厂中看到 $data 变量,将您的国家/地区作为 key => value 对放在此变量中。如果您可以创建一个要点,我可以对其进行编辑。
    • 当然,1 分钟,我在 github 上发帖,如果可以的话,你可以看看 :)
    • 我目前正在做的是“Distrito”选择,而不是国家/地区,我们将其更改为 distrito。它在 Influenciador 模块中。
    猜你喜欢
    • 1970-01-01
    • 2017-03-15
    • 2013-03-04
    • 1970-01-01
    • 2016-05-27
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多