PasswordResetRequestForm.php 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. <?php
  2. namespace common\modules\user\models;
  3. use yii\base\Model;
  4. /**
  5. * Password reset request form.
  6. */
  7. class PasswordResetRequestForm extends Model
  8. {
  9. public $email;
  10. /**
  11. * {@inheritdoc}
  12. */
  13. public function rules()
  14. {
  15. return [
  16. ['email', 'filter', 'filter' => 'trim'],
  17. ['email', 'required'],
  18. ['email', 'email'],
  19. ['email', 'exist',
  20. 'targetClass' => '\common\modules\user\models\User',
  21. 'filter' => ['blocked_at' => null],
  22. 'message' => '邮箱不存在',
  23. ],
  24. ];
  25. }
  26. public function attributeLabels()
  27. {
  28. return [
  29. 'email' => '邮箱',
  30. ];
  31. }
  32. /**
  33. * Sends an email with a link, for resetting the password.
  34. *
  35. * @return bool whether the email was send
  36. */
  37. public function sendEmail()
  38. {
  39. /* @var $user User */
  40. $user = User::findByEmail($this->email);
  41. if ($user) {
  42. if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
  43. $user->generatePasswordResetToken();
  44. }
  45. if ($user->save()) {
  46. $mailer = \Yii::$app->mailer;
  47. $mailer->viewPath = '@common/modules/user/mail';
  48. return $mailer->compose(['html' => 'passwordResetToken-html', 'text' => 'passwordResetToken-text'], ['user' => $user])
  49. ->setFrom([\Yii::$app->config->get('MAIL_USERNAME') => \Yii::$app->config->get('name').' robot'])
  50. ->setTo($this->email)
  51. ->setSubject('重置密码 -' . \Yii::$app->config->get('name'))
  52. ->send();
  53. }
  54. }
  55. return false;
  56. }
  57. }