user 数据表
CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`auth_key` varchar(32) COLLATE utf8_unicode_ci NOT NULL,
`password_hash` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`password_reset_token` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
`email` varchar(255) COLLATE utf8_unicode_ci NOT NULL,
`status` smallint(6) NOT NULL DEFAULT 10,
`created_at` int(11) NOT NULL,
`updated_at` int(11) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`),
UNIQUE KEY `password_reset_token` (`password_reset_token`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
vendor/yiisoft/yii2/web/User.php 以组件方式加载,
故调用方式为 \YII::$app->user
绑定的User model类默认为 common\models\User (全命名空间)
修改前后台绑定各自User model类, 参考如下;
默认配置为
'components' => [
'user' => [
'identityClass' => 'common\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
'loginUrl' => ['site/login'],
],
修改 yii默认前后台配置, 分离前后台使用数据表
复制公共模型到前台
cp common/models/User.php frontend/models/User.php
修改模型命名空间 vi frontend/models/User.php
namespace frontend\models;
修改 frontend/models/SignupForm.php
改动命名空间引用User
namespace frontend\models;
use yii\base\Model;
use frontend\models\User;
改动验证引用User
public function rules()
{
return [
['username', 'unique', 'targetClass' => '\frontend\models\User', 'message' => 'This username has already been taken.'],
['email', 'unique', 'targetClass' => '\frontend\models\User', 'message' => 'This email address has already been taken.'],
];
}
复制公共模型到前台
cp common/models/LoginForm.php frontend/models/
修改SiteController 命名空间中引用LoginForm
use frontend\models\LoginForm;
修改 LoginForm 命名空间
namespace frontend\models;
修改 frontend\models\PasswordResetRequestForm.php
修改命名空间引用 User
namespace frontend\models;
use frontend\models\User;
修改验证规则引用User;
public function rules()
{
return [
['email', 'exist',
'targetClass' => '\frontend\models\User',
'filter' => ['status' => User::STATUS_ACTIVE],
'message' => 'There is no user with this email address.'
],
];
}
修改 frontend\models\ResetPasswordForm.php
修改命名空间引用User;
namespace frontend\models;
use frontend\models\User;
配置前台user组件 vi frontend/config/main.php
'user' => [
'identityClass' => 'frontend\models\User',
'enableAutoLogin' => true,
'identityCookie' => ['name' => '_identity-frontend', 'httpOnly' => true],
'loginUrl' => ['site/login'],
],
复制公共模块下的LoginFrom 到后台模块
cp common/models/LoginForm.php backend/models/LoginForm.php
修改 LoginForm.php 命名空间中引用LoginForm
namespace backend\controllers;
use backend\models\LoginForm;
修改LoginForm.php名称空间空间
namespace backend\models
修改LoginForm中调用User语句为Admin::
protected function getUser()
{
if ($this->_user === null) {
$this->_user = Admin::findByUsername($this->username);
}
return $this->_user;
}
cp common/models/User.php.back backend/models/Admin.php
修改Admin.php 命名空间
namespace backend\models;
修改Admin.php类名
class Admin extends ActiveRecord implements IdentityInterface
修改数据表名
public static function tableName()
{
return '{{%admin}}';
}
修改配置文件加载User组件
'components' => [
'user' => [
'identityClass' => 'backend\models\Admin',
'enableAutoLogin' => true,
'idParam' => 'a673946c007d6a9927f70bdf5d491861',
'identityCookie' => ['name' => '57e1c593208b24ba572dc1591823eec3', 'httpOnly' => true],
],
// \yii\base\model实现load方法代码如下
public function load($data, $formName = null)
{
$scope = $formName === null ? $this->formName() : $formName;
if ($scope === '' && !empty($data)) {
$this->setAttributes($data);
return true;
} elseif (isset($data[$scope])) {
$this->setAttributes($data[$scope]);
return true;
}
return false;
}