首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用null上的成员函数getDb()

调用null上的成员函数getDb()
EN

Stack Overflow用户
提问于 2018-08-19 08:21:04
回答 1查看 1.8K关注 0票数 4

我使用Yii2框架和dektrium/yii2-user模块来处理restful环境中的身份验证。

这是我的API目录结构:

代码语言:javascript
复制
api
├── config
│   ├── api.php
│   ├── bootstrap.php
│   ├── params.php
│   └── routes.php
├── index.php
├── modules
│   └── v1
│       ├── controllers
│       │   └── UserController.php
│       ├── models
│       │   └── User.php
│       └── Module.php
└── runtime

api.php

代码语言:javascript
复制
...
$config = [
    ...
    'components' => [
        'user' => [
            'identityClass'  => 'app\api\modules\v1\models\User',
            'enableAutoLogin'  => false,
        ],
        'request' => [
            'parsers' => [
                'application/json' => 'yii\web\JsonParser',
            ]
        ],
        'urlManager' => [
            'class' => 'yii\web\UrlManager',
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => require(__DIR__ . '/routes.php'),
        ],
        'db' => [
            'class' => 'yii\db\Connection',
            'dsn' => 'mysql:host=localhost;dbname=DBname',
            'username' => 'DBusername',
            'password' => 'DBpassword',
            'charset' => 'utf8'
        ],
    ],
    'modules' => [
        'v1' => [
            'class' => 'app\api\modules\v1\Module',
            'controllerNamespace' => 'app\api\modules\v1\controllers',
        ],
    ],
    ...
];
...

UserController.php

代码语言:javascript
复制
class UserController extends ActiveController
{
    public $modelClass = 'app\api\modules\v1\models\User';

    public function behaviors()
    {
        $behaviors = parent::behaviors();
        $behaviors['authenticator'] = [
            'class' => HttpBearerAuth::className(),
        ];
        return $behaviors;
    }
}

User.php

代码语言:javascript
复制
use dektrium\user\models\User as Base;

class User extends Base
{
    public static function findIdentityByAccessToken($token, $type = null)
    {
        return static::findOne(['auth_key' => $token]);
    }
}

当我试图通过这样的curl发出HTTP请求时:

代码语言:javascript
复制
curl -H 'Accept:application/json' -H "Authorization: Bearer <Token>" http://<url>/api/v1/users

我得到的结果是:

代码语言:javascript
复制
"name": "Exception",
"message": "Call to a member function getDb() on null",
"code": 0,
"type": "Error",
"file": "<project path>/vendor/dektrium/yii2-user/traits/ModuleTrait.php",
"line": 28,

28线在ModuleTrait.php:

代码语言:javascript
复制
public static function getDb()
{
    return \Yii::$app->getModule('user')->getDb();
}

在检查每个步骤的结果时,我发现\Yii::$app->getModule('user')值是null

你知道如何修复这个错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-19 08:35:29

您没有user模块-您可以尝试添加一个有效的模块:

代码语言:javascript
复制
'modules' => [
    'v1' => [
        'class' => 'app\api\modules\v1\Module',
        'controllerNamespace' => 'app\api\modules\v1\controllers',
    ],
    'user' => [
        'class' => 'dektrium\user\Module',
        'admins' => ['your_admin_username'],
        'enableRegistration' => false,
        'enableConfirmation' => false,
        'mailer' => ['welcomeSubject' => 'welcome in my application  '],
    ],
    // ... 
],
// ...
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51915804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档