如何使用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)
*/
));
答案 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)