我在Yii2开发了一个应用程序,作为旅行社的后台。
我使用了基本的开始模板,并使用gii(代码生成器)为模型创建了CRUDS(酒店,酒店客房,酒店图像等)
我还想创建两个不同的前端应用程序(一个用于零售,另一个用于其他代理),我想将它与后端(可能是angular.js应用程序)分开并通过REST获取信息可能是一个很好的方法。
所以我想根据用gii制作的模型使用API Rest。
我怎样才能做到这一点? 我读过这个: http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html
并且它说我必须切换控制器。
目前我有(用gii生成)
类HotelController扩展Controller
并阅读指南,说我必须使用
类HotelController扩展了ActiveController
但如果我进行此更改,后台将不再起作用。
最好的方法是什么?
使扩展ActiveController的另一个 APIHotelController?
我可以合并(以某种方式)与gii生成的控制器?
实现这种层分离的任何其他方式(后端)?
谢谢!
答案 0 :(得分:0)
到目前为止,我知道构建REST API Yii2 Web应用程序而不会弄乱现有代码或路由配置的最优雅的解决方案是将REST API构建为包含MVC元素的单独子应用程序,这意味着在Yii的世界中:作为module。
您已有一个可在web
文件夹中访问的工作代码,它在index.php
文件中拥有自己的Entry Scripts,它自己的服务器配置({{1 }}文件,如果使用 apache )及其应用程序将依赖的.htaccess
文件夹中的自己的应用配置,然后再解析您的网址并呈现您的视图相关config
和controllers
内的文件。
所以我们的想法是创建一个新的models
文件夹,让我们称之为web
,使用自己的Entry Scripts文件,自己的服务器配置,自己的api
文件夹并拥有config
扩展ActiveController类。
然后,您的controllers
应用和web
服务都将共享相同的api
文件,以验证,存储或检索数据。
您的应用将从此基本模板结构移动:
models
到这个新结构(来自下面链接的教程):
+ assets
+ config
+ controllers
+ models
+ views
+ web
...
然后,您需要将+ web
+ config
+ controllers
...
+ api
+ config
+ modules
+ v1
+ controllers
.htaccess
index.php
服务注册为单独的模块,以便Yii工作和初始化。
然后,您将在{{{{{{ 1}}或api
( url结构取决于您的网络和API配置)。
为了实现必要的代码,这里有一个很棒的step by step tutorial。它使用基本模板结构并遵循yii的api versionning方法( web
文件夹)。