LoginForm.php 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. <?php
  2. namespace common\forms;
  3. use Yii;
  4. use yii\base\Model;
  5. use common\models\member\Member;
  6. use common\models\base\User;
  7. /**
  8. * Class LoginForm
  9. * @package common\forms
  10. */
  11. class LoginForm extends Model
  12. {
  13. public $username;
  14. public $password;
  15. public $rememberMe = true;
  16. /**
  17. * @var Member
  18. */
  19. protected $_user;
  20. /**
  21. * {@inheritdoc}
  22. */
  23. public function rules()
  24. {
  25. return [
  26. // username and password are both required
  27. [['username', 'password'], 'required'],
  28. // rememberMe must be a boolean value
  29. ['rememberMe', 'boolean'],
  30. // password is validated by validatePassword()
  31. ['password', 'validatePassword'],
  32. ];
  33. }
  34. /**
  35. * Validates the password.
  36. * This method serves as the inline validation for password.
  37. *
  38. * @param string $attribute the attribute currently being validated
  39. * @param array $params the additional name-value pairs given in the rule
  40. */
  41. public function validatePassword($attribute, $params)
  42. {
  43. if (!$this->hasErrors()) {
  44. $user = $this->getUser();
  45. if (!$user || !$user->validatePassword($this->password)) {
  46. $this->addError($attribute, '用户名或密码错误');
  47. }
  48. }
  49. }
  50. /**
  51. * Logs in a user using the provided username and password.
  52. *
  53. * @return bool whether the user is logged in successfully
  54. */
  55. public function login()
  56. {
  57. if ($this->validate()) {
  58. return Yii::$app->user->login($this->getUser(), $this->rememberMe ? 3600 * 24 * 30 : 0);
  59. }
  60. return false;
  61. }
  62. /**
  63. * Finds user by [[username]]
  64. *
  65. * @return User|null
  66. */
  67. protected function getUser()
  68. {
  69. if ($this->_user === null) {
  70. $this->_user = User::findByUsername($this->username);
  71. }
  72. return $this->_user;
  73. }
  74. }
粤ICP备19079148号