2017-02-14 51 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