2017-02-14 54 views
1

我有一个现有的Yii2应用程序,并一直试图实现一个REST API作为附加模块(也许一个模块不是正确的方式去做这件事?)但我有配置路线结构有些麻烦。它不起作用,不符合预期的结果,基于following guideYii2 REST API作为模块路由配置

我已经建立了一个附加模块,看起来像这样:

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;

选项/用户:显示有关端点/用户的支持动词;

选项/用户/ 123:关于显示端点/用户支持的动词/ 123

我有什么可能在此设置什么错呢?有没有更好的方法在现有网站上实施API,同时保持DRY做法?

回答

2

试试这个:

'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

+0

漂亮的网址已经启用为该网站,因为它是。我尝试了你的改变,但得到了相同的结果:-( – Jonnny

+0

''controller'=> ['api/user']'你是否用''enableStrictParsing'=> true'来试试? –

+0

我认为它可能有效。 '能够访问http:// localhost/site1/web/users和http:// localhost/site1/web/users/2以获取信息。只需确认其他请求 – Jonnny