如何在Zend框架2中填充Form中的Form Select

时间:2014-09-05 06:29:03

标签: zend-framework2 zend-form

之前提出这个问题。但是问题/解决方案与使用fieldset相关或者它们更老并且使用ZF2早期版本的技术。现在我知道http://framework.zend.com/manual/2.3/en/modules/zend.form.advanced-use-of-forms.html。但是解决方案与使用FormElementManager将字段集绑定到表单有关。对于最近的大多数问题重新编写创建动态表单下拉列表也是如此。

但我有一个包含3个下拉字段的表单,可以从DB获取数据。到目前为止,我可以选择将DB Adapter从Controller传递给Form的构造函数。但现在我想使用更好的方法来填充下拉列表,最好是FormElementManager但不使用Fieldsets。

如果真的有可能建立这样的系统吗?

1 个答案:

答案 0 :(得分:2)

您可以通过工厂注入数据库适配器。以下配置可以在Module.php中,也可以在配置文件中。您可以从任何服务管理器感知类中注入数据库适配器或objectManager,并从应用程序中其他位置的服务管理器检索表单对象。

public function getFormElementConfig()
    {
        return array(

            'factories' => array(
                'MyForm' => function (ServiceManager $sm)
                {
                    $form = new \MyNamespace\MyForm($sm->get('my_db_adapter'));
                    return $form;
                },
                   )
    }

此表单现在可通过任何服务感知类的服务定位器获得:

$serviceLocator->get('FormElementManager')->get('MyForm');

已经通过工厂注入了数据库适配器的依赖性。

要从控制器访问该对象,您可能需要考虑创建一个Controller插件,以使ServiceManager对象远离Controller类。

//MyController.php
public function myAction(){
//retrieve form via plugin with the DB adapter already set
$myForm=$this->myForm();
}