Php Zend_形与浮点数的局部化
我使用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语言环境,在这个语言环境中
$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值传递回表单时,应该可以看到数组中的原始值。当数组被传递到表单中并设置元素的值时,可能会触发过滤器,我只是在代码或文档中找不到它。您可能希望转储阵列并查看其中的真正内容。