我为一个特殊的、复杂的目的创建了一个新的表单元素类(带有用于打开“搜索向导”弹出窗口的附加按钮的文本输入字段)。
为了正确渲染这个元素,我还创建了一个表单视图助手。一切正常,到目前为止一切正常。
但是,如果我尝试使用 FormCollection 视图助手呈现表单,则该元素将呈现为基本输入元素。这是因为 FormCollection 助手所依赖的 FormElement 视图助手使用一系列硬编码的 if 子句将元素的类型映射到特定的表单视图助手。它无法映射我元素的类,因此回退到FormInput
.
即(取自 Zend/Form/View/Helper/FormElement.php,第 41-49 行):
if ($element instanceof Element\Button) {
$helper = $renderer->plugin('form_button');
return $helper($element);
}
if ($element instanceof Element\Captcha) {
$helper = $renderer->plugin('form_captcha');
return $helper($element);
}
...
$helper = $renderer->plugin('form_input');
return $helper($element);
等等。
我在这里有点卡住了,因为这种架构并没有真正促进可扩展性。
我想到的唯一解决方案(除了手动渲染表单)是扩展 FormElement 视图助手类,从而创建我自己的 CustomFormElement 视图助手。但是,由于其复杂性,我已将自定义元素放入自己的模块中。所以我必须动态地编写这个 CustomFormElement 助手来添加来自任何模块的自定义元素。我不认为这是推荐的程序。
是否有另一种解决方案,或者甚至不推荐我的完整方法?提前致谢!