OSDN Git Service

Внесены исправления в алгоритм формирования стартовой страницы. Внесены коррективы...
[invent/invent.git] / models / LoginForm.php
1 <?php
2
3 namespace app\models;
4
5 use Yii;
6 use yii\base\Model;
7
8 /**
9  * LoginForm is the model behind the login form.
10  *
11  * @property User|null $user This property is read-only.
12  *
13  */
14 class LoginForm extends Model
15 {
16     public $username;
17     public $password;
18     public $rememberMe = true;
19
20     private $_user = false;
21
22
23     /**
24      * @return array the validation rules.
25      */
26     public function rules()
27     {
28         return [
29             // Имя пользователя и пароль. Ода обязательные.
30             [['username', 'password'], 'required'],
31             // Запомнить должен быть логическим
32             ['rememberMe', 'boolean'],
33             // пароль проверяется через validatePassword()
34             ['password', 'validatePassword'],
35         ];
36     }
37
38     /**
39      * Проверка пароля.
40      * This method serves as the inline validation for password.
41      *
42      * @param string $attribute the attribute currently being validated
43      * @param array $params the additional name-value pairs given in the rule
44      */
45     public function validatePassword($attribute, $params)
46     {
47         if (!$this->hasErrors()) {
48             $user = $this->getUser();
49
50             if (!$user || !$user->validatePassword($this->password)) {
51                 $this->addError($attribute, Yii::t('app', 'Incorrect username or password.'));
52             }
53         }
54     }
55
56     public function attributeLabels()
57     {
58         return [
59             'username' => Yii::t('app', 'User name'),
60             'password' => Yii::t('app', 'Password'),
61             'rememberMe' => Yii::t('app', 'Remember Me'),
62         ];
63     }
64
65     /**
66      * Logs in a user using the provided username and password.
67      * @return bool whether the user is logged in successfully
68      */
69     public function login()
70     {
71         if ($this->validate()) {
72             return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600*24*30 : 0);
73         }
74         return false;
75     }
76
77     /**
78      * Finds user by [[username]]
79      *
80      * @return User|null
81      */
82     public function getUser()
83     {
84         if ($this->_user === false) {
85             $this->_user = User::findByUsername($this->username);
86         }
87
88         return $this->_user;
89     }
90 }