我有一个现有的Yii2应用程序,并且一直在尝试将REST API作为附加模块来实现(也许模块不是解决此问题的正确方法?)但是我在配置路由结构时遇到了一些麻烦。根据以下指南,它不能完全正常工作,也不符合预期结果。
我建立了一个附加模块,如下所示:
module
api
controllers
UserController.php
Module.php
Run Code Online (Sandbox Code Playgroud)
UserController.php
<?php
namespace app\modules\api\controllers;
use yii\rest\ActiveController;
class UserController extends ActiveController
{
public $modelClass = 'app\models\User';
}
Run Code Online (Sandbox Code Playgroud)
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
}
}
Run Code Online (Sandbox Code Playgroud)
在我的配置文件中,我添加了以下内容:
'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',
],
]
Run Code Online (Sandbox Code Playgroud)
当我通过邮递员运行以下网址时,我得到以下信息:
我不确定为什么在文档中指出的预测路线为:
尝试上面的最小工作量,您已经完成了创建用于访问用户数据的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;
选项/用户:显示有关端点/用户的支持动词;
选项/ users / 123:显示有关端点/ users / 123的受支持动词
在此设置中我可能做错了什么?有没有更好的方法来在现有网站中实施API,同时保持DRY惯例?
尝试这个:
'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',
],
]
Run Code Online (Sandbox Code Playgroud)
还要确保实现 PrettyUrl 的相关服务器服务器配置。