我正在尝试设置一个"忘记密码"系统。用户输入电子邮件,如果存在,则会记录一封新的电子邮件并将其发送到输入的用户电子邮件地址。用户电子邮件检查工作正常。当试图在系统中输入新密码时,它不会。
代码是这样的:
..... (form is_valid and check email ok)
if(is_object($object)) {
$newpassword = substr(str_shuffle(str_repeat('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',8)),0,8);
$input = $form->getValues();
$user = Doctrine::getTable('Tcc_Model_User')
->find($input['email']);
$user->fromArray($input);
$user->Password = md5($newpassword);
$user->save();
......
email send
} else {
$form->getElement('email')->addError('Sorry, there is no record of that email adddress.');
}
我得到的错误是:
Call to a member function fromArray() on a non-object
有人能帮我弄清楚我做错了什么吗?请
简单地说,$user
不是一个对象。它可能是false
或null
,这意味着find()
实际上并没有找到它要找的东西。
您可以看到$user
在var_dump($user)
中的实际含义,然后您应该阅读find
的文档,了解它为什么返回该值。
根据文档,Doctrine_Table::find()
(在错误上方的行中调用)返回以下实体之一:
Doctrine_Collection、array、Doctrine_Record或false(如果没有结果)
这意味着您需要在尝试使用值$user
之前检查返回的内容,就好像它是一个公开fromArray()
方法的对象一样。