我正在使用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验证器几乎被忽略了。在呈现表单时,文本字段中包含0(零)但在文本字段中输入文本时不显示错误消息 - 即使对于在数据库中设置为int的mobile_number字段也是如此。
请指教?
答案 0 :(得分:7)
这是因为在验证器之前处理过滤器。
所以你的代码的作用如下:
因此,要解决此问题,只需删除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');
...
}
}