SiteController.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255
  1. <?php
  2. namespace frontend\controllers;
  3. use frontend\models\ResendVerificationEmailForm;
  4. use frontend\models\VerifyEmailForm;
  5. use Yii;
  6. use yii\base\InvalidArgumentException;
  7. use yii\web\BadRequestHttpException;
  8. use yii\web\Controller;
  9. use yii\filters\VerbFilter;
  10. use yii\filters\AccessControl;
  11. use common\forms\LoginForm;
  12. use frontend\models\PasswordResetRequestForm;
  13. use frontend\models\ResetPasswordForm;
  14. use frontend\models\SignupForm;
  15. use frontend\models\ContactForm;
  16. /**
  17. * Site controller
  18. */
  19. class SiteController extends Controller
  20. {
  21. /**
  22. * {@inheritdoc}
  23. */
  24. public function behaviors()
  25. {
  26. return [
  27. 'access' => [
  28. 'class' => AccessControl::className(),
  29. 'only' => ['logout', 'signup'],
  30. 'rules' => [
  31. [
  32. 'actions' => ['signup'],
  33. 'allow' => true,
  34. 'roles' => ['?'],
  35. ],
  36. [
  37. 'actions' => ['logout'],
  38. 'allow' => true,
  39. 'roles' => ['@'],
  40. ],
  41. ],
  42. ],
  43. 'verbs' => [
  44. 'class' => VerbFilter::className(),
  45. 'actions' => [
  46. 'logout' => ['post'],
  47. ],
  48. ],
  49. ];
  50. }
  51. /**
  52. * {@inheritdoc}
  53. */
  54. public function actions()
  55. {
  56. return [
  57. 'error' => [
  58. 'class' => 'yii\web\ErrorAction',
  59. ],
  60. 'captcha' => [
  61. 'class' => 'yii\captcha\CaptchaAction',
  62. 'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null,
  63. ],
  64. ];
  65. }
  66. /**
  67. * Displays homepage.
  68. *
  69. * @return mixed
  70. */
  71. public function actionIndex()
  72. {
  73. return $this->render('index');
  74. }
  75. /**
  76. * Logs in a user.
  77. *
  78. * @return mixed
  79. */
  80. public function actionLogin()
  81. {
  82. if (!Yii::$app->user->isGuest) {
  83. return $this->goHome();
  84. }
  85. $model = new LoginForm();
  86. if ($model->load(Yii::$app->request->post()) && $model->login()) {
  87. return $this->goBack();
  88. }
  89. $model->password = '';
  90. return $this->render('login', [
  91. 'model' => $model,
  92. ]);
  93. }
  94. /**
  95. * Logs out the current user.
  96. *
  97. * @return mixed
  98. */
  99. public function actionLogout()
  100. {
  101. Yii::$app->user->logout();
  102. return $this->goHome();
  103. }
  104. /**
  105. * Displays contact page.
  106. *
  107. * @return mixed
  108. */
  109. public function actionContact()
  110. {
  111. $model = new ContactForm();
  112. if ($model->load(Yii::$app->request->post()) && $model->validate()) {
  113. Yii::$app->session->setFlash('error', 'Submission not supported.');
  114. return $this->refresh();
  115. }
  116. return $this->render('contact', [
  117. 'model' => $model,
  118. ]);
  119. }
  120. /**
  121. * Displays about page.
  122. *
  123. * @return mixed
  124. */
  125. public function actionAbout()
  126. {
  127. return $this->render('about');
  128. }
  129. /**
  130. * Signs user up.
  131. *
  132. * @return mixed
  133. */
  134. public function actionSignup()
  135. {
  136. $model = new SignupForm();
  137. if ($model->load(Yii::$app->request->post()) && $model->signup()) {
  138. Yii::$app->session->setFlash('success', 'Thank you for registration. Please check your inbox for verification email.');
  139. return $this->goHome();
  140. }
  141. return $this->render('signup', [
  142. 'model' => $model,
  143. ]);
  144. }
  145. /**
  146. * Requests password reset.
  147. *
  148. * @return mixed
  149. */
  150. public function actionRequestPasswordReset()
  151. {
  152. $model = new PasswordResetRequestForm();
  153. if ($model->load(Yii::$app->request->post()) && $model->validate()) {
  154. if ($model->sendEmail()) {
  155. Yii::$app->session->setFlash('success', 'Check your email for further instructions.');
  156. return $this->goHome();
  157. }
  158. Yii::$app->session->setFlash('error', 'Sorry, we are unable to reset password for the provided email address.');
  159. }
  160. return $this->render('requestPasswordResetToken', [
  161. 'model' => $model,
  162. ]);
  163. }
  164. /**
  165. * Resets password.
  166. *
  167. * @param string $token
  168. * @return mixed
  169. * @throws BadRequestHttpException
  170. */
  171. public function actionResetPassword($token)
  172. {
  173. try {
  174. $model = new ResetPasswordForm($token);
  175. } catch (InvalidArgumentException $e) {
  176. throw new BadRequestHttpException($e->getMessage());
  177. }
  178. if ($model->load(Yii::$app->request->post()) && $model->validate() && $model->resetPassword()) {
  179. Yii::$app->session->setFlash('success', 'New password saved.');
  180. return $this->goHome();
  181. }
  182. return $this->render('resetPassword', [
  183. 'model' => $model,
  184. ]);
  185. }
  186. /**
  187. * Verify email address
  188. *
  189. * @param string $token
  190. * @throws BadRequestHttpException
  191. * @return yii\web\Response
  192. */
  193. public function actionVerifyEmail($token)
  194. {
  195. try {
  196. $model = new VerifyEmailForm($token);
  197. } catch (InvalidArgumentException $e) {
  198. throw new BadRequestHttpException($e->getMessage());
  199. }
  200. if (($user = $model->verifyEmail()) && Yii::$app->user->login($user)) {
  201. Yii::$app->session->setFlash('success', 'Your email has been confirmed!');
  202. return $this->goHome();
  203. }
  204. Yii::$app->session->setFlash('error', 'Sorry, we are unable to verify your account with provided token.');
  205. return $this->goHome();
  206. }
  207. /**
  208. * Resend verification email
  209. *
  210. * @return mixed
  211. */
  212. public function actionResendVerificationEmail()
  213. {
  214. $model = new ResendVerificationEmailForm();
  215. if ($model->load(Yii::$app->request->post()) && $model->validate()) {
  216. if ($model->sendEmail()) {
  217. Yii::$app->session->setFlash('success', 'Check your email for further instructions.');
  218. return $this->goHome();
  219. }
  220. Yii::$app->session->setFlash('error', 'Sorry, we are unable to resend verification email for the provided email address.');
  221. }
  222. return $this->render('resendVerificationEmail', [
  223. 'model' => $model
  224. ]);
  225. }
  226. }
粤ICP备19079148号