Yii2 REST API作为模块路由配置

时间:2017-02-14 15:50:13

标签: php rest api yii2

我有一个现有的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实践?

1 个答案:

答案 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