今天我们聊下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'
]
],
按照上面的配置理论上是没问题的。我们看一下结果: