ZF2 将数据库中的值获取到窗体类中


ZF2 get values from database into form class

在 ZF2 中,假设我有一个Select,形式为:

    $this->add([
        'type' => 'Zend'Form'Element'Select',
        'name' => 'someName',
        'attributes' => [
            'id' => 'some-id',
        ],
        'options' => [
            'label' => 'Some Label',
            'value_options' => [
                '1' => 'type 1',
                '2' => 'type 2',
                '3' => 'type 3',
            ],
        ],
    ]);

如何将数据库查询中的值"类型 1"、"类型 2"、"类型 3"等放入value_options

通过使用表单元素管理器注册自定义选择元素,您可以使用工厂来加载所需的表单选项。

namespace MyModule'Form'Element;
class TypeSelectFactory
{
    public function __invoke(FormElementManager $formElementManager)
    {
        $select = new 'Zend'Form'Element'Select('type');
        $select->setAttributes(]
            'id' => 'some-id',
        ]);
        $select->setOptions([
            'label' => 'Some Label',
        ]);
        $serviceManager = formElementManager->getServiceLocator();
        $typeService  = $serviceManager->get('Some''Service''That''Executes''Queries');
        // getTypesAsArray returns the expected value options array 
        $valueOptions = $typeService->getTypesAsArray();
        $select->setValueOptions($valueOptions);
        return $select;
    }
}

以及module.config.php所需的配置.

'form_elements' => [
    'factories' => [
        'MyModule''Form''Element''TypeSelect'
            => 'MyModule''Form''Element''TypeSelectFactory',
    ]
],

然后,您可以在将元素添加到窗体时使用MyModule''Form''Element''TypeSelect作为type值。

另外,请务必阅读有关自定义表单元素的文档;这描述了如何正确使用表单元素管理器,这对于上述工作至关重要。