Permalink
Find file
Fetching contributors…
Cannot retrieve contributors at this time
81 lines (72 sloc) 2.23 KB
<?php
namespace frontend\models;
use common\models\User;
use yii\base\Model;
use yii\di\Container;
use Yii;
/**
* Password reset request form
*/
class PasswordResetRequestForm extends Model
{
public $email;
public function init()
{
parent::init();
Yii::$app->set('mailer', [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
'transport' => [
'class' => 'Swift_SmtpTransport',
'host' => Yii::$app->setting->get('smtpHost'),
'username' => Yii::$app->setting->get('smtpUser'),
'password' => Yii::$app->setting->get('smtpPassword'),
'port' => Yii::$app->setting->get('smtpPort'),
// 'mail' => Yii::$app->setting->get('smtpMail'), // 显示地址
'encryption' => 'tls',
],
]);
}
/**
* @inheritdoc
*/
public function rules()
{
return [
['email', 'filter', 'filter' => 'trim'],
['email', 'required'],
['email', 'email'],
['email', 'exist',
'targetClass' => '\common\models\User',
'filter' => ['status' => User::STATUS_ACTIVE],
'message' => 'There is no user with such email.'
],
];
}
/**
* Sends an email with a link, for resetting the password.
*
* @return boolean whether the email was send
*/
public function sendEmail()
{
/* @var $user User */
$user = User::findOne([
'status' => User::STATUS_ACTIVE,
'email' => $this->email,
]);
if ($user) {
if (!User::isPasswordResetTokenValid($user->password_reset_token)) {
$user->generatePasswordResetToken();
}
if ($user->save()) {
return \Yii::$app->mailer->compose('passwordResetToken', ['user' => $user])
->setFrom([\Yii::$app->setting->get('smtpUser') => \Yii::$app->name . ' robot'])
->setTo($this->email)
->setSubject('Password reset for ' . \Yii::$app->name)
->send();
}
}
return false;
}
}