所以,我在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筛选输入,并在模型中将数据筛选回原始数据。
祝你好运。