如何在表单中使用 zend 框架过滤器的最佳方式


How is the best way to use zend framework filters in forms?

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

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

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

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

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

谢谢。

数据库中

的内容和模型中的内容是模型层的一部分。在这种情况下,映射器应负责转换。您不应该将其移动到窗体中,实际上窗体更像是视图层的一部分,而不是其他任何内容。

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

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

如果你真的想在形式上做这种过滤,你根本不需要弄乱Zend_Form_Element_*。只需编写一对过滤器。Zend_Form使用 Zend_Filter.
中的可用筛选器Zend_filter有一个可扩展的接口,用于构建自己的过滤器,就像 Zend_Validate.
一样编写过滤器后,您可以在任何需要的地方使用它们。Zend_Form筛选输入,并在模型中将数据筛选回原始数据。

祝你好运。