Zend framework 如何修改zend Db_RecordExists validator where子句?

Zend framework 如何修改zend Db_RecordExists validator where子句?,zend-framework,zend-form,zend-form-element,zend-validate,Zend Framework,Zend Form,Zend Form Element,Zend Validate,我想在where子句中添加多个值的检查。Db_RecordExists只需检查一个字段。我已经读到,您可以扩展zend validate抽象类,并且可以拥有自己的验证器。我能举一个小例子吗 谢谢…您通常需要做的就是重写isValid方法来创建自定义验证器,下面是一个自定义验证器的示例: <?php class My_Validator_Usphone extends Zend_Validate_Abstract { const PHONE = 'phone'; prot

我想在where子句中添加多个值的检查。Db_RecordExists只需检查一个字段。我已经读到,您可以扩展zend validate抽象类,并且可以拥有自己的验证器。我能举一个小例子吗


谢谢…

您通常需要做的就是重写isValid方法来创建自定义验证器,下面是一个自定义验证器的示例:

<?php

class My_Validator_Usphone extends Zend_Validate_Abstract {
    const PHONE = 'phone';

    protected $_messageTemplates = array(
        self::PHONE => "'%value%' is not a valid U.S. phone number.
            Phone number must be entered in (xxx)xxx-xxxx or xxx-xxx-xxxx format."
    );

    public function isValid($value) {
        $this->_setValue($value);

        $isValid = TRUE;
        $pattern = ('/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/');
        if (!preg_match($pattern, $value)) {
            $this->_error(self::PHONE);
            $isValid = FALSE;
        }
        return $isValid;
    }

您通常需要做的就是重写isValid方法来创建自定义验证器,下面是一个自定义验证器的示例:

<?php

class My_Validator_Usphone extends Zend_Validate_Abstract {
    const PHONE = 'phone';

    protected $_messageTemplates = array(
        self::PHONE => "'%value%' is not a valid U.S. phone number.
            Phone number must be entered in (xxx)xxx-xxxx or xxx-xxx-xxxx format."
    );

    public function isValid($value) {
        $this->_setValue($value);

        $isValid = TRUE;
        $pattern = ('/^\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$/');
        if (!preg_match($pattern, $value)) {
            $this->_error(self::PHONE);
            $isValid = FALSE;
        }
        return $isValid;
    }

你到底想做什么?对我来说,你甚至不需要自定义验证器

如果仔细阅读Zend_Validate_Db_Abstract的源代码,您会注意到构造函数上方的phpDoc:

提供与Zend_Validate_Db验证器一起使用的基本配置 设置$exclude允许从匹配中排除单个记录。 Exclude可以是包含where子句的字符串,也可以是具有字段和值键的数组 定义添加到sql的where子句。 可以选择提供数据库适配器,以避免使用已注册的默认适配器

支持以下选项键: 'table'=>要验证的数据库表 “schema'=>架构键 'field'=>要检查匹配项的字段 'exclude'=>要从查询中排除的可选where子句或字段/值对 “适配器”=>要使用的可选数据库适配器 这意味着,如果要使用多个值检查记录是否存在,只需将where子句传递给验证器,而不是一对字段/值:

$where = 'user_id != 110 AND email != "email@example.com"';
$where = array('users', 'email', $where);

$element->addValidator('db_NoRecordExists', true, $where)
这将基本上检查用户表中是否存在记录,并排除用户id!=110或email@example.com. 当然,我建议您使用诸如quoteIdentifier之类的工具来生成完全转义的查询表达式

当然,您可以添加任意数量的字段


你可以找到。

你到底想做什么?对我来说,你甚至不需要自定义验证器

如果仔细阅读Zend_Validate_Db_Abstract的源代码,您会注意到构造函数上方的phpDoc:

提供与Zend_Validate_Db验证器一起使用的基本配置 设置$exclude允许从匹配中排除单个记录。 Exclude可以是包含where子句的字符串,也可以是具有字段和值键的数组 定义添加到sql的where子句。 可以选择提供数据库适配器,以避免使用已注册的默认适配器

支持以下选项键: 'table'=>要验证的数据库表 “schema'=>架构键 'field'=>要检查匹配项的字段 'exclude'=>要从查询中排除的可选where子句或字段/值对 “适配器”=>要使用的可选数据库适配器 这意味着,如果要使用多个值检查记录是否存在,只需将where子句传递给验证器,而不是一对字段/值:

$where = 'user_id != 110 AND email != "email@example.com"';
$where = array('users', 'email', $where);

$element->addValidator('db_NoRecordExists', true, $where)
这将基本上检查用户表中是否存在记录,并排除用户id!=110或email@example.com. 当然,我建议您使用诸如quoteIdentifier之类的工具来生成完全转义的查询表达式

当然,您可以添加任意数量的字段


您可以找到。

谢谢。我希望你能回答。请给我留出一些时间。我想了解Bootstrap.php。谢谢。嘿@Liyali我希望用户输入的密码与表中的哈希密码匹配。如何做?因为您没有指明要在何处执行此操作,并且我认为您不想在表单验证程序中执行此操作,所以可以使用Zend_Auth。非常感谢。我希望你能回答。请给我留出一些时间。我想了解Bootstrap.php。谢谢。嘿@Liyali我希望用户输入的密码与表中的哈希密码匹配。如何做?因为您没有指明要在何处执行此操作,并且我认为您不想在表单验证程序中执行此操作,所以可以使用Zend_Auth。我有三个问题。在zend结构中该类放在哪里?2.我通过扩展zend表单来使用表单。那么如何在那里使用它呢?3.表单发布后,如何将所需值传递给该类?谢谢你的时间和帮助。我有三个问题。在zend结构中该类放在哪里?2.我通过扩展zend表单来使用表单。那么如何在那里使用它呢?3.表单发布后,如何将所需值传递给该类?谢谢你的时间和帮助。