Yii2 REST API作为模块路由配置

Jon*_*nny 5 php api rest yii2

我有一个现有的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惯例?

Sal*_*ani 4

尝试这个:

'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 的相关服务器服务器配置