LoginController.php 2.8 KB
<?php

namespace frontend\modules\user\controllers;

use Yii;
use yii\web\Response;
use yii\widgets\ActiveForm;
use yii\filters\AccessControl;
//
use frontend\components\BaseController;
use frontend\modules\user\models\form\SignInForm;

/**
 * Class LoginController
 *
 * @package frontend\modules\user\controllers
 * @author FilamentV <vortex.filament@gmail.com>
 * @copyright (c), Thread
 */
class LoginController extends BaseController
{
    public $title = "Login";
    public $defaultAction = 'index';
    public $layout = "@app/layouts/user-register";
    protected $model = SignInForm::class;

    /**
     * @return array
     */
    public function behaviors()
    {
        return [
            'AccessControl' => [
                'class' => AccessControl::class,
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['index', 'validate'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                    [
                        'allow' => false,
                    ],
                ],
            ],
        ];
    }

    /**
     * @return string
     */
    public function actionIndex()
    {
        /**
         * @var $module \frontend\modules\user\User
         */
        $module = $this->module;

        if (!Yii::$app->getUser()->isGuest) {
            return $this->redirect($module->params['login']['redirect-if-guest']);
        }

        /** @var $model SignInForm */
        $model = new $this->model;
        $model->setScenario('signIn');
        $model->load(Yii::$app->getRequest()->post());
        if(isset($model['rememberMe']) && $model['rememberMe'] == 'on'){
            $model['rememberMe'] = 1;
        } else{
            $model['rememberMe'] = 0;
        }
        if ($model->login()) {
            return $this->redirect($module->params['login']['redirect-after-login']);
        } else {
            return $this->render('index', [
                'model' => $model,
            ]);
        }
    }

    /**
     * Перевірка валідації моделі(-ей)
     * Має бути встановдений у моделі scenario 'backend'
     * @return mixed
     */
    public function actionValidate()
    {
        /** @var Model $model */
        $model = new $this->model;
        $model->setScenario('signIn');
        $model->load(Yii::$app->getRequest()->post());
        if (isset($model['rememberMe']) && $model['rememberMe'] == 'on') {
            $model['rememberMe'] = true;
        } else {
            $model['rememberMe'] = false;
        }
        Yii::$app->getResponse()->format = Response::FORMAT_JSON;

        return ActiveForm::validate($model);
    }

}