Yii2 Advanced - 使后台使用'admin'表和'Admin'模型

时间:2015-05-05 18:27:12

标签: php yii2 yii2-advanced-app

我正在尝试像传统的用户/管理系统一样设置Yii2高级版。前端将是/ user和后端将是/ admin,并将在数据库中使用它们各自的表(用户和管理员)。我还没有将前端和后端重命名为用户和管理员..

使用migrate生成'user'表及其所有字段。我注册创建了一个新用户,一切都很完美。然后我复制了'user'表并将其命名为'admin',并将用户名更改为admin。我可以更改密码,或截断密码,注册新的管理员用户,然后从后端删除注册。数据库本身的管理表不是问题,因为当我到达错误时,我没有那么远..

我已经设置并在前端(用户)端使用Yii2高级版。当然,你有Yii :: $ app->用户,它在前端工作得很好。我可以登录,它使用'用户'表。前端工作得很好......

现在在后端(管理员)我需要它来使用'admin'表。我知道你指定要在模型中使用的表。我复制了/common/models/User.php并拥有/common/models/Admin.php并更新了该函数以改为使用'admin'表。

我还复制了/vendor/yiisoft/yii2/web/User.php并将其放在/common/models/web/Admin.php中(并将该类的名称从User重命名为Admin)

然后我编辑了/backend/config/main.php以反映Admin(class和identityClass)的更改。

/backend/config/main.php

'components' => [
    'admin' => [
        'identityClass' => 'common\models\Admin',
        'class' => 'common\models\web\Admin',
        'enableAutoLogin' => true,
    ],
],

/common/models/web/Admin.php

class Admin extends Component { ... }

/common/models/Admin.php

class Admin extends ActiveRecord implements IdentityInterface {
    public static function tableName()
    {
        return '{{%admin}}';
    }
}

错误: User::identityClass must be set.< - 正如您所看到的,它仍然引用了用户模型的某些方式......

另外,当我得到这个设置时,我会使用Yii :: $ app-> admin而不是Yii :: $ app->用户?喜欢检查他们是否使用isGuest登录。

我想确保用户无法登录前端,然后手动转到后端并登录!

1 个答案:

答案 0 :(得分:3)

我已经解决了这个问题:)

您必须编辑每个(前端和后端)的主配置并为用户组件指定'identityClass',并将“session”和“request”添加到列表中。

前端配置示例:

'components' => [
    'user' => [
        'identityClass' => 'common\models\User',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_frontendUser', // unique for frontend
        ]
    ],
    'session' => [
        'name' => 'PHPFRONTSESSID',
        'savePath' => sys_get_temp_dir(),
    ],
    'request' => [
        // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
        'cookieValidationKey' => '[RANDOM KEY HERE]',
        'csrfParam' => '_frontendCSRF',
    ],
],

后端配置示例:

'components' => [
    'user' => [
        'identityClass' => 'common\models\Admin',
        'enableAutoLogin' => true,
        'identityCookie' => [
            'name' => '_backendUser', // unique for backend
        ]
    ],
    'session' => [
        'name' => 'PHPBACKSESSID',
        'savePath' => sys_get_temp_dir(),
    ],
    'request' => [
        // !!! insert a secret key in the following (if it is empty) - this is required by cookie validation
        'cookieValidationKey' => '[DIFFERENT UNIQUE KEY]',
        'csrfParam' => '_backendCSRF',
    ],
],

有关更详细的指南,您可以阅读我创建的维基。

维基:[Guide] How to actually separate Frontend and Backend on Yii2 Advanced