Php 在null上调用成员函数getDb()
我正在使用Yii2框架和Php 在null上调用成员函数getDb(),php,rest,yii2,yii2-user,Php,Rest,Yii2,Yii2 User,我正在使用Yii2框架和dektrium/Yii2 user模块在restful环境中处理身份验证 这是我的API目录结构: api ├── config │ ├── api.php │ ├── bootstrap.php │ ├── params.php │ └── routes.php ├── index.php ├── modules │ └── v1 │ ├── controllers │ │ └── UserController.php
dektrium/Yii2 user
模块在restful环境中处理身份验证
这是我的API目录结构:
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
...
$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',
],
],
...
];
...
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;
}
}
use dektrium\user\models\User as Base;
class User extends Base
{
public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne(['auth_key' => $token]);
}
}
UserController.php
...
$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',
],
],
...
];
...
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;
}
}
use dektrium\user\models\User as Base;
class User extends Base
{
public static function findIdentityByAccessToken($token, $type = null)
{
return static::findOne(['auth_key' => $token]);
}
}
User.php
...
$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',
],
],
...
];
...
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;
}
}
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 POST请求时,如下所示:
curl -H 'Accept:application/json' -H "Authorization: Bearer <Token>" http://<url>/api/v1/users
当我检查每个步骤的结果时,我发现\Yii::$app->getModule('user')
值为null
您知道如何修复此错误吗?您没有
用户
模块-您可以尝试添加一个有效的模块:
'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 '],
],
// ...
],
// ...
请注意,这还将启用和引导整个模块,并注册一些组件和URL规则。如果只在某些RESTAPI中使用模型,则可能会出现问题。