【问题标题】:Zend_Form and Float number localizationZend_Form 和浮点数本地化
【发布时间】:2012-03-05 19:10:28
【问题描述】:

我正在使用 Zend_Form 处理表单,但我遇到了本地化问题。

我使用以下字段声明:

$this->addElement('text', 'area', array(
        'label' => 'Area:',
        'required' => true,
        'filters' => array('StringTrim', 'NormalizedToLocalized')
    ));

问题是,我使用 pl_PL 语言环境,在这个语言环境中,小数点分隔符是“,”而不是“.”。但是数据库(MySQL)存储浮动“。”分隔符。

我添加了 NormalizedToLocalized 来转换例如40.12 转换成 40,12 在我的 html 表单中。

但是当在 POST 请求中传递 40,12 时,我希望 Zend_Form 自动将值 40,12 转换回 40.12 以便它可以传递给 DB(我使用 $form->getValues() 方法从表单中收集值)。现在它成功渲染了 40,12 但在 $form->getValues() 我得到了本地化,而不是标准化值。

所以我的问题是,是否可以在 Zend Framework 中创建不同的过滤器来渲染和获取字段值。

提前感谢您的帮助!

【问题讨论】:

    标签: php zend-framework localization zend-form


    【解决方案1】:

    在提交表单之前不会应用过滤器,因此'NormalizedToLocalized' 在发布表单之前不会有任何效果。因此,如果您希望数据中的小数点而不是逗号用于存储,请从表单中删除过滤器(或使用 'LocalizedToNormalized'),然后使用 Zend_Filter 对您需要显示的任何数据应用过滤器。
    如果此字段始终需要浮点类型,您可以使用 validator 强制执行该值,然后使用过滤器强制数据库格式化。

    $this->addElement('text', 'area', array(
            'label' => 'Area:',
            'required' => true,
            'validators' => array('Float'),
            'filters' => array('StringTrim', 'LocalizedToNormalized')
        ));
    

    【讨论】:

    • 这适用于从表单到数据库,但如果显示数据(例如,在编辑的情况下或由于另一个字段未验证而重新显示表单时)它会显示规范化。
    • 您必须知道您使用的是哪个数据集。过滤器只会应用于通常通过$form->getValues() 或类似访问的表单元素值,过滤器通常不会应用于 $_POST 数组,这是通常在验证失败后传递回表单的数据集.如果您需要对表单数据以外的数据应用过滤器,则需要通过 Zend_Filter_Input 传递该数据。
    • 我使用$this->_request->getPost() 重新填充并使用'filters' => array('StringTrim', 'LocalizedToNormalized') 并在验证失败后查看我的本地化输入 (,) 恢复为规范化 (.)。 getPost() 没有得到 $_POST 数组吗?
    • 是的 getPost() 确实访问了 $_POST 数组。 $this->getRequest()->getPost() 中的值应该是未过滤的。 (这就是文档所说的)。因此,当您在验证失败后将 $_POST 值传递回表单时,您应该会看到数组中的原始值。当数组传入表单并设置元素的值时,可能会触发过滤器,我只是在代码或文档中找不到它。你可能想转储你的数组,看看里面到底有什么。
    【解决方案2】:

    我不熟悉 Zend Framework,但看过滤器名称,不应该是 'LocalizedToNormalized' 吗?

    【讨论】:

      猜你喜欢
      • 2022-07-26
      • 1970-01-01
      • 2019-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多