Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 向Yii Rest API的Url规则添加版本_Php_Yii - Fatal编程技术网

Php 向Yii Rest API的Url规则添加版本

Php 向Yii Rest API的Url规则添加版本,php,yii,Php,Yii,我有一个带有Yii框架的REST API,它基于: 我想在Url规则中添加一个API版本,如: array('api/view', 'pattern'=>'api/<version:\d+>/<model:\w+>/<id:\d+>', 'verb'=>'GET'), array('api/view'、'pattern'=>'api//'、'verb'=>'GET'), 我应该怎么做呢?如果你想使用一个控制器,你可以像以前那样遵守规则: ar

我有一个带有Yii框架的REST API,它基于:

我想在Url规则中添加一个API版本,如:

array('api/view', 'pattern'=>'api/<version:\d+>/<model:\w+>/<id:\d+>', 'verb'=>'GET'),
array('api/view'、'pattern'=>'api//'、'verb'=>'GET'),

我应该怎么做呢?

如果你想使用一个控制器,你可以像以前那样遵守规则:

array('api/view', 'pattern'=>'api/<version:\d+>/<model:\w+>/<id:\d+>', 'verb'=>'GET'),
另一个解决方案是使用

  • 在“parseUrl”方法中,检查url是否与规则匹配 (存在api/version/model/id),如果匹配取决于重定向到正确控制器的api版本(例如:apiV2/view)
代码:


如果您想使用一个控制器,您可以像以前一样保留规则:

array('api/view', 'pattern'=>'api/<version:\d+>/<model:\w+>/<id:\d+>', 'verb'=>'GET'),
另一个解决方案是使用

  • 在“parseUrl”方法中,检查url是否与规则匹配 (存在api/version/model/id),如果匹配取决于重定向到正确控制器的api版本(例如:apiV2/view)
代码:


将整个API放入一个模块,将版本放入子模块,并将其包含在主模块配置中:

/api    -> modules.ApiModule
/api/v1 -> modules.ApiModule.modules.V1Module
/api/v2 -> modules.ApiModule.modules.V2Module
。。。等等


我认为默认Yii路由器的path版本自动支持这种模式,但我可能错了。在任何情况下,将版本组织到模块中都可以让它们在保持不同的同时轻松共享代码,并使错误呈现回到用户的自然状态。

将整个API放入一个模块中,将版本放入子模块中,并将其包含在主模块配置中:

/api    -> modules.ApiModule
/api/v1 -> modules.ApiModule.modules.V1Module
/api/v2 -> modules.ApiModule.modules.V2Module
。。。等等


我认为默认Yii路由器的path版本自动支持这种模式,但我可能错了。在任何情况下,将版本组织到模块中都可以让它们在保持不同的同时轻松地共享代码,并使错误恢复到用户的自然状态。

您的实际问题是什么?规则不起作用了?你把规则放在数组中的默认规则之前了吗?我不知道如何实现在url添加版本,因为我只有一个名为ApiController.php的控制器。我如何在url上实现一个重定向到正确控制器的版本?您的实际问题是什么?规则不起作用了?你把规则放在数组中的默认规则之前了吗?我不知道如何实现在url添加版本,因为我只有一个名为ApiController.php的控制器。如何在url处实现一个版本,并将其重定向到正确的控制器?为了获得更清晰的代码,最好将版本分为不同的控制器。如何编写“中间人”代码以传递给正确的控制器?我用另一种解决方案更新了我的答案。我知道根据不同的版本使用不同的控制器会更好,因为id取决于两个版本之间的代码是否有很大差异!没问题!如果答案解决了你的问题,你应该点击勾号接受答案!为了获得更清晰的代码,最好将版本分为不同的控制器。如何编写“中间人”代码以传递给正确的控制器?我用另一种解决方案更新了我的答案。我知道根据不同的版本使用不同的控制器会更好,因为id取决于两个版本之间的代码是否有很大差异!没问题!如果答案解决了你的问题,你应该点击勾号接受答案!