Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Yii2高级-使后端使用';管理员';表和';管理员';模型_Php_Yii2_Yii2 Advanced App - Fatal编程技术网

Php Yii2高级-使后端使用';管理员';表和';管理员';模型

Php Yii2高级-使后端使用';管理员';表和';管理员';模型,php,yii2,yii2-advanced-app,Php,Yii2,Yii2 Advanced App,我正在尝试像传统的用户/管理系统一样设置Yi2 advanced。前端将是/user,后端将是/admin,并将使用数据库中各自的表(user和admin)。我还没有将前端和后端重命名为用户和管理员 使用migrate生成“user”表及其所有字段。我注册创建了一个新用户,一切都很完美。然后我复制了“user”表并将其命名为“admin”,并将用户名改为admin。我可以更改密码,或者截断密码,注册新的管理员用户,然后稍后从后端删除注册。db中的admin表本身并不是问题所在,因为当我遇到错误时

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

使用migrate生成“user”表及其所有字段。我注册创建了一个新用户,一切都很完美。然后我复制了“user”表并将其命名为“admin”,并将用户名改为admin。我可以更改密码,或者截断密码,注册新的管理员用户,然后稍后从后端删除注册。db中的admin表本身并不是问题所在,因为当我遇到错误时,我并没有走得太远

我已经在它的前端(用户)设置并使用了Yi2 advanced。当然,您有Yii::$app->user,它在前端工作正常。我可以登录,它使用“用户”表。前端工程伟大

现在在后端(admin),我需要它来使用“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,
    ],
],
class Admin extends Component { ... }
class Admin extends ActiveRecord implements IdentityInterface {
    public static function tableName()
    {
        return '{{%admin}}';
    }
}
/common/models/web/Admin.php

'components' => [
    'admin' => [
        'identityClass' => 'common\models\Admin',
        'class' => 'common\models\web\Admin',
        'enableAutoLogin' => true,
    ],
],
class Admin extends Component { ... }
class Admin extends ActiveRecord implements IdentityInterface {
    public static function tableName()
    {
        return '{{%admin}}';
    }
}
/common/models/Admin.php

'components' => [
    'admin' => [
        'identityClass' => 'common\models\Admin',
        'class' => 'common\models\web\Admin',
        'enableAutoLogin' => true,
    ],
],
class Admin extends Component { ... }
class Admin extends ActiveRecord implements IdentityInterface {
    public static function tableName()
    {
        return '{{%admin}}';
    }
}
错误:
必须设置User::identityClass。
我已解决此问题:)

您必须编辑每个组件(前端和后端)的主配置,为用户组件指定“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',
    ],
],
后端配置示例:

'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',
    ],
],
有关更详细的指南,您可以阅读我创建的wiki

维基: