【问题标题】:Yii2 BackOffice with API REST ImplementationYii2 BackOffice 与 API REST 实现
【发布时间】:2015-10-26 06:41:45
【问题描述】:

我在 Yii2 中开发了一个应用程序,作为旅行社的后台。

我使用了基本的启动模板,并使用 gii(代码生成器)为模型(Hotels、HotelRooms、HotelImages 等)创建 CRUDS

我还想创建两个不同的前端应用程序(一个用于零售,另一个用于其他机构),我想将它与后端(可能是 angular.js 应用程序)分开并通过 REST 获取信息可能是个好方法。

所以我想使用基于gii制作的模型的API Rest。

我怎样才能做到这一点? 我读过这个: http://www.yiiframework.com/doc-2.0/guide-rest-quick-start.html

它说我必须切换控制器。

目前我有(用 gii 生成)

类 HotelController 扩展控制器

阅读指南说我必须使用

HotelController 类扩展 ActiveController

但如果我进行此更改,后台将不再工作。

最好的方法是什么?

制作另一个扩展 ActiveController 的 APIHotelController?

我可以合并(以某种方式)与 gii 生成的控制器吗?

还有其他方法可以实现这种层分离(前后)吗?

谢谢!

【问题讨论】:

  • 为 api 创建单独的模块。

标签: angularjs rest yii2 frontend backend


【解决方案1】:

到目前为止,我所知道的构建 REST API Yii2 Web 应用程序而不弄乱现有代码或路由配置的最优雅的解决方案是将 REST API 构建为一个单独的包含 MVC 元素的子应用程序,这意味着在 Yii 的世界里:module.

您已经有一个工作代码,可在web 文件夹中访问,它在index.php 文件中拥有自己的Entry Scripts,它自己的服务器配置(如果使用apache.htaccess 文件>) 及其在 config 文件夹中的应用程序配置,在解析您的 URL 并在其相关的 controllersmodels 中呈现您的 view 文件之前,您的应用程序将依赖该文件夹。

所以想法是创建一个新的web 文件夹,我们称之为api,例如,它有自己的Entry Scripts 文件、自己的服务器配置、自己的config 文件夹和自己的controllers 扩展@ 987654324@班级。

那么,您的web 应用程序和api 服务将共享相同的models 文件以验证、存储或检索数据。

您的应用将从这个基于模板的基本结构迁移:

+ assets
+ config
+ controllers
+ models
+ views
+ web
...

到这个新结构(来自下面链接的教程):

+ web
+ config
+ controllers
...
+ api
  + config
  + modules
    + v1
      + controllers
  .htaccess
  index.php

然后你需要将你的api 服务注册为单独的模块才能工作并被 Yii 初始化。

然后您将使用不同的 URL 来访问您的 web 应用程序和相关的 views 或 Rest api 和相关的 json/xml 输出分别在 http://[your_path]/web/controller/actionhttp://[your_path]/api/v1/controller/action 中( url 结构取决于你的 web 和 api 配置)。

为了实现必要的代码,这里有一个很棒的step by step tutorial。它使用基本模板结构并遵循 yii 的 api versionning 方法(v1 文件夹)。

【讨论】:

  • 感谢您的精彩解释!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 1970-01-01
  • 2013-10-17
  • 2018-07-08
  • 1970-01-01
  • 2020-03-20
  • 2015-10-18
相关资源
最近更新 更多