我有一个现有的Yii2应用程序并且一直在尝试将REST API作为一个附加模块实现(也许模块不是正确的方法吗?)但是我在配置上遇到了一些问题路线结构。根据{{3}},它并没有完全奏效,也没有遵循预期的结果。
我已经构建了一个如下所示的附加模块:
module
api
controllers
UserController.php
Module.php
UserController.php
<?php
namespace app\modules\api\controllers;
use yii\rest\ActiveController;
class UserController extends ActiveController
{
public $modelClass = 'app\models\User';
}
Module.php
<?php
namespace app\modules\api;
/**
* onco module definition class
*/
class Module extends \yii\base\Module
{
public $defaultController = 'user';
/**
* @inheritdoc
*/
public $controllerNamespace = 'app\modules\api\controllers';
/**
* @inheritdoc
*/
public function init()
{
parent::init();
// custom initialization code goes here
}
}
在我的配置文件中,我添加了以下内容:
'request' => [
...
'parsers' => [
'application/json' => 'yii\web\JsonParser',
]
],
...
'urlManager' => [
'enablePrettyUrl' => true,
'showScriptName' => false,
'enableStrictParsing' => false, // have tried as true also
'rules' => [
...
['class' => 'yii\rest\UrlRule', 'controller' => '\app\modules\api\controllers\user'],
],
],
...
'modules' => [
...
'api' => [ // module for RESTful API
'class' => 'app\modules\api\Module',
],
]
当我通过邮递员运行以下网址时,我得到以下内容:
我不确定为什么在文档中记录的预测路线为:
尝试使用上述最小的努力,你有 已经完成了创建用于访问的RESTful API的任务 用户数据。您创建的API包括: GET / users:逐页列出所有用户;
HEAD / users:显示用户列表的概述信息;
POST / users:创建一个新用户;
GET / users / 123:返回用户123的详细信息;
HEAD / users / 123:显示用户123的概述信息;
PATCH / users / 123和PUT / users / 123:更新用户123;
DELETE / users / 123:删除用户123;
OPTIONS / users:显示有关端点/用户的受支持动词;
OPTIONS / users / 123:显示有关endpoint / users / 123
的受支持动词
在此设置中,我可能做错了什么?有没有更好的方法将API实施到现有网站,同时保持DRY实践?
答案 0 :(得分:3)
试试这个:
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
[
'class' => 'yii\rest\UrlRule',
'controller' => ['api/user'],
]
]
],
...
'modules' => [
...
'api' => [
'basePath' => '@app/modules/api',
'class' => 'app\modules\api\Module',
],
]
还要确保实现prettyUrl的related server server configs。