0

所以,我在 Zend Framework 的表单中使用过滤器时遇到了问题。

当您在表单元素上设置过滤器时,它会以各种方式过滤提供给元素的数据。因此,如果我在表单上调用 isValid(),'Int' 过滤器会将字符串“1”转换为 int 1。但如果我将元素的值设置为字符串“1”,该值仍将转换为一个整数 1。

这种行为给我带来了问题。例如,根据企业的规则,所有浮点值必须乘以 100 才能保存到 db(是的,这很糟糕)。所以,我为此创建了一个过滤器,10 变为 1000。但是当填充表单时,1000 变为 100000。

我想要一种方法来做到这一点,而无需在模型中工作,仅在形式中。所以,我想创建一个标志,以指定何时调用过滤器。

有没有更好的方法来做到这一点?我发誓我确实四处寻找过,但我什么也没找到。

谢谢。

4

3 回答 3

2

数据库中的内容和模型中的内容是模型层的一部分。在这种情况下,映射器应该负责转换。你不应该把它移到表单上,它实际上是视图层的一部分,而不是其他任何东西。

于 2012-06-13T18:15:20.577 回答
0

我猜最好的方法是设置一个标志并扩展 getvalue 和 setvalue。

setValue 总是将数字除以每 100,而 getValue 总是将其乘以如果标志(这意味着过滤器)存在。

于 2012-06-13T18:34:36.667 回答
0

如果你真的想在表单中进行这种过滤,你根本不需要弄乱 Zend_Form_Element_*。只需编写一对过滤器Zend_Form使用来自 Zend_Filter 的可用过滤器。
Zend_filter有一个与 Zend_Validate 相同的可扩展接口,用于构建您自己的过滤器。
编写过滤器后,您可以在需要它们的任何地方使用它们。Zend_Form 过滤输入并在您的模型中将数据过滤回原始数据。

祝你好运。

于 2012-06-17T06:56:33.030 回答