今天我們聊下yii2 api 的版本控制問題。api接口按理論上來說,經常會更新的,還有會接所有語言。所以設置版本還是很重要的。廢話少說。
一、目錄結構 創建modules v1 v2 controllers 文件夾 和 Module.php 文件
二 、編輯Module.php 文件這個是配置初始化的文件,必須要有。
<?php
namespace app\modules\v1;
class Module extends \yii\base\Module
{
public $controllerNamespace = 'app\modules\v1\controllers';
public function init()
{
parent::init();
}
}```
三、在 app/modules/v1/controllers 或 app/modules/v2/controllers 創建MapController.php
<?php
namespace app\modules\v1\controllers;
use yii;
use yii\rest\ActiveController;
/**
* Class MapController
* @package app\controllers
* 城市
*/
class MapController extends ActiveController
{
public $modelClass = 'common\models\Map';
public function actionSearch() {
$modelClass = $this->modelClass;
$params = Yii::$app->request->queryParams;
$where = [
'pid'=>isset($params['id'])?$params['id']:0
];
return $modelClass::find()->where($where)->all();
}
}
四、編輯配置文件main.php,截取的代碼
return [
'id' => 'app-app',
'basePath' => dirname(__DIR__),
'bootstrap' => ['log'],
//配置版本文件
'modules' => [
'v1' => [
'class' => 'app\modules\v1\Module'
],
'v2' => [
'class' => 'app\modules\v2\Module'
]
],
'controllerNamespace' => 'app\controllers',
'components' => [
'request' => [
'csrfParam' => '_csrf-app',
],
'urlManager' => [
'enablePrettyUrl' => true,
'enableStrictParsing' => true,
'showScriptName' => false,
'rules' => [
// ['class' => 'yii\rest\UrlRule', 'controller' => 'article'],
//城市接口
[
'class' => 'yii\rest\UrlRule',
'only'=>['search','test'],
'controller' => 'map',
'pluralize'=>false,
'extraPatterns' => [
'GET search' => 'search',
'GET test' => 'test'
]
],
[
'class' => 'yii\rest\UrlRule',
'controller' => [
'v1/map',
'v2/map',
],
'pluralize'=>false,
'extraPatterns' => [
'GET search' => 'search',
'GET test' => 'test'
]
],
按照上面的配置理論上是沒問題的。我們看一下結果: