Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend_形与浮点数的局部化_Php_Zend Framework_Localization_Zend Form - Fatal编程技术网

Php Zend_形与浮点数的局部化

Php Zend_形与浮点数的局部化,php,zend-framework,localization,zend-form,Php,Zend Framework,Localization,Zend Form,我使用Zend_表单来处理表单,但我在本地化方面遇到了问题 我使用以下字段声明: $this->addElement('text', 'area', array( 'label' => 'Area:', 'required' => true, 'filters' => array('StringTrim', 'NormalizedToLocalized') )); 问题是,我使用pl_pl语言环境,在这个语言环境中

我使用Zend_表单来处理表单,但我在本地化方面遇到了问题

我使用以下字段声明:

$this->addElement('text', 'area', array(
        'label' => 'Area:',
        'required' => true,
        'filters' => array('StringTrim', 'NormalizedToLocalized')
    ));
问题是,我使用pl_pl语言环境,在这个语言环境中,小数点分隔符是“not”。但数据库(MySQL)存储的浮点值带有“.”分隔符

我添加了NormalizedToLocalized,以在html表单中将例如40.12转换为40,12

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

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


提前感谢您的帮助

我不熟悉Zend框架,但查看过滤器名称,它是否应该是
'LocalizedToLocalized'

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

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

这在表单和数据库之间都适用,但如果显示数据(例如,在编辑时,或当表单因另一个字段未验证而重新显示时),则会显示规范化。您必须知道使用的数据集。过滤器仅应用于通常通过
$form->getValues()
或类似方式访问的表单元素值,过滤器通常不会应用于$\u POST数组,该数组是验证失败后通常传递回表单的数据集。如果需要对表单数据以外的数据应用筛选器,则需要通过
Zend\u filter\u Input
传递该数据。我使用
$this->\u request->getPost()
重新填充和
'filters'=>数组('StringTrim','LocalizedToNormalized')
并在验证失败后将我的本地化输入(,)恢复为规范化()。getPost()没有获取$\u POST数组吗?是
getPost()
访问$\u POST数组。
$this->getRequest()->getPost()
中的值应该未过滤。(医生是这么说的)。因此,在验证失败后将$\u POST值传递回表单时,应该可以看到数组中的原始值。当数组被传递到表单中并设置元素的值时,可能会触发过滤器,我只是在代码或文档中找不到它。您可能希望转储阵列并查看其中的真正内容。