gpt4 book ai didi

zend-framework - 为什么无法识别我的 Zend Validate Digits?

转载 作者:行者123 更新时间:2023-12-04 04:25:58 25 4
gpt4 key购买 nike

我正在使用 Zend Framework 创建一个表单来捕获用户人口统计数据。我正在努力验证两个文本字段中的数字。

我在 ../application/forms/UserDemographics.php 中构建我的表单,如下所示:

class Application_Form_UserDemographics extends Zend_Form
{
public function init()
{
$this->form = new Zend_Form;
$dbAdapter = Zend_Registry::get("db");

...

$this->fax_number = new Zend_Form_Element_Text('fax_number');
$this->fax_number->setLabel('Fax Number')
->addFilter('Int')
->addFilter('StripTags')
->addValidator('Digits');

$this->mobile_number = new Zend_Form_Element_Text('mobile_number');
$this->mobile_number->setLabel('Mobile Number')
->addFilter('Int')
->addFilter('StripTags')
->addValidator('Digits');

...

}
}

关于 fax_number 和 mobile_number 字段,我的数据库当前配置如下,以便我可以测试数字是否被接受:

+-----------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------------+-------------+------+-----+---------+----------------+
...
| fax_number | varchar(32) | NO | | NULL |
| mobile_number | int(15) | YES | | NULL |
...

当我在 zend 表单的任一字段中输入数字以外的任何内容时,即使我在两个元素中都添加了数字验证器,也不会显示错误消息。

输入到手机号码文本字段中的文本在数据库中被替换为 0(零):

mysql> select fax_number, mobile_number from user_demographics;
+--------------------+---------------+
| fax_number | mobile_number |
+--------------------+---------------+
| var char no digits | 0 |
+--------------------+---------------+

至少 mobile_number 字段应该显示一条错误消息,说明只能在文本字段中输入数字,对吗?

为什么似乎无法识别 Digits 验证器?

这基本上表明 Digits 验证器几乎被忽略了。呈现表单时文本字段中有 0(零),但当我在文本字段中输入文本时没有显示错误消息 - 即使是在数据库中设置为 int 的 mobile_number 字段也不显示。

请指教?

最佳答案

这是因为过滤器在验证器之前被处理。

那么您的代码将执行以下操作:

  1. 采纳意见
  2. 将其转换为 int,如果包含任何不可转换的文本,则为 0
  3. 剥离标签
  4. 检查输入是否只包含数字,由于 int-filter,情况总是如此。

因此要解决这个问题,只需删除 int-filter:

class Application_Form_UserDemographics extends Zend_Form
{
public function init()
{
$this->form = new Zend_Form;
$dbAdapter = Zend_Registry::get("db");

...

$this->fax_number = new Zend_Form_Element_Text('fax_number');
$this->fax_number->setLabel('Fax Number')
->addFilter('StripTags')
->addValidator('Digits');

$this->mobile_number = new Zend_Form_Element_Text('mobile_number');
$this->mobile_number->setLabel('Mobile Number')
->addFilter('StripTags')
->addValidator('Digits');

...

}
}

关于zend-framework - 为什么无法识别我的 Zend Validate Digits?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10933421/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com