Zend表单旧密码验证

时间:2013-12-06 18:29:08

标签: php zend-framework zend-form zend-validate

如何使用Zend_Validate_Db_RecordExists检查特定记录是否存在?

这是我的代码,我希望在用户更改之前匹配旧密码

 $oldpassexist = new Zend_Validate_Db_RecordExists(array(
            'table' => 'user',
            'field' => 'password',
                /** check if password matches
                 *  WHERE user_id = Auth::getuser()->id AND password = md5(THIS FIELD ENTRY) 
                 */
        ));

2 个答案:

答案 0 :(得分:1)

添加另一个where子句非常简单。 Zend_Validate_Db_RecordExists允许您修改其内部使用的Zend_Db_Select对象。所以你可以写:

$oldpassexist = new Zend_Validate_Db_RecordExists(array(
        'table' => 'user',
        'field' => 'password',
    ));

// reset the where clause used by Zend_Validate_Db_RecordExists
$oldpassexist->getSelect()->reset('where');

// set user_id and password. :value is a named parameter that will be 
// substituted by the value passed to the isValid method
$oldpassexist->getSelect()->where('user_id = ?', Auth::getuser()->id);
$oldpassexist->getSelect()->where('password = MD5(:value)');

将查询密码为哈希值MD5以及user_id字段。但是,我觉得这个解决方案不是很优雅。我可能会为此编写自己的Validator。在任何情况下,您都应该编写完整的测试用例来检测Zend_Validate_Db_RecordExists的行为是否会在某一天发生变化。

答案 1 :(得分:0)

我在另一个网站上找到了解决方案:))

http://husseycoding.blogspot.fr/2011/07/creating-custom-zend-form-validator.html