我正在学习 zf2,我面临一个涉及 2 个(最终更多)模块一起工作的问题。请注意,我已经仔细阅读了这篇文章(以及相关的文章),这对我有很大帮助。我将解释一下这个问题:
- 使用第一个模块 (FrOption),管理员可以管理网站表单选项。所有选项都存储在一个 db 表中,如下所示:
id|field_name|field_value
1|国家|德国|
2|国家|法国|
3|性别|男|
4|性别|女|
5|tipo|汽车|
6|提波|飞|
...
- 在我的模块(FrItem)中,我构建了一个需要一些“field_name”字段的表单。我的“项目”表如下:
id|名称|id_tipo|
1|菲亚特|5|
2|汉莎|6|
3|福特|5|
4|法航 6|
...
(id_tipo 是一个选项 FK)
还要考虑:
- 我的实体具有“tipo”属性,setter + getter
- 我已经构建了一个 ItemHydrator 以将 id_tipo db 字段“映射”到“tipo”实体属性
作为测试,我在表单类中添加了这个字段,并且在查看和编辑模式下一切正常:
$this->add( 'type' => 'Zend\Form\Element\Select', 'name' => 'id_tipo', 'options' => array ( 'label' => 'Tipo', 'empty_option' => 'Select', 'value_options' => array ('5' => 'Car', '6' => 'Fly' ) )
);
现在我想“链接”这两个模块: value_options 应该是来自 FrOption 的动态数组,所以我正在寻找实现这一要求的最佳方法。
我认为一种解决方案可能是这样的:
- 将 getOptionByName($fieldName) 方法添加到我的 FrOption/src/FrOption/Service/FrOption.php 服务类
- 在 FrItem/Module.php 中检索服务,然后使用 getOptionByName 将数据全部注入到表单中。
这可能是一个明智且可行的解决方案吗?你对它的性能有什么看法(选项表可能会增长)?如果有的话,你用什么样的解决方案来解决类似的问题?
谢谢