控制器 PublicController.php
<?php
namespace app\modules\controllers;
use yii\web\Controller;
use app\modules\models\Admin;
use Yii;
class PublicController extends Controller
{
public function actionLogin()
{
$this->layout=false;
$model=new Admin;
if(Yii::$app->request->isPost){
$post=Yii::$app->request->post();
if($model->login($post)){
$this->redirect(['default/index']);
Yii::$app->end();
}
}
return $this->render('login',['model'=>$model]);
}
}
模型 Admin.php
<?php
namespace app\modules\models;
use yii\db\ActiveRecord;
use Yii;
class Admin extends ActiveRecord{
public $rememberMe = true;
public static function tableName()
{
return '{{%admin}}';
}
public function rules()
{
return [
['adminuser', 'required', 'message' => '管理员账号不能为空'],
['adminpass', 'required', 'message' => '管理员密码不能为空'],
['rememberMe', 'boolean'],
['adminpass', 'validatePass'],
];
}
public function validatePass()
{
if (!$this->hasErrors()) {
$data = self::find()->where('adminuser = :user and adminpass = :pass', [":user" => $this->adminuser, ":pass" => md5($this->adminpass)])->one();
if (is_null($data)) {
$this->addError("adminpass", "用户名或者密码错误");
}
}
}
public function login($data)
{
if ($this->load($data) && $this->validate()) {
$lifetime = $this->rememberMe ? 24*3600 : 0;
$session = Yii::$app->session;
session_set_cookie_params($lifetime);
$session['admin'] = [
'adminuser' => $this->adminuser,
'isLogin' => 1,
];
$this->updateAll(['logintime' => time(), 'loginip' => ip2long(Yii::$app->request->userIP)], 'adminuser = :user', [':user' => $this->adminuser]);
return (bool)$session['admin']['isLogin'];
}
return false;
}
}
视图 login.php
<?php $form=ActiveForm::begin([
'fieldConfig'=>[
'template'=>'{error}{input}',
],
]); ?>
<?php echo $form->field($model, 'adminuser')->textInput(["class" => "span12", "placeholder" => "管理员账号"]); ?>
<?php echo $form->field($model, 'adminpass')->passwordInput(["class" => "span12", "placeholder" => "管理员密码"]); ?>
<a href="<?php echo yii\helpers\Url::to(['public/seekpassword']); ?>" class="forgot">忘记密码?</a>
<?php echo $form->field($model, 'rememberMe')->checkbox([
'id' => 'remember-me',
'template' => '<div class="remember">{input}<label for="remember-me">记住我</label></div>',
]); ?>
<?php echo Html::submitButton('登录', ["class" => "btn-glow primary login"]); ?>
<?php ActiveForm::end(); ?>