【发布时间】:2015-07-29 19:13:17
【问题描述】:
我有一个现有的 Zend Framework 2 项目。现在我一直在尝试并考虑将前端完全重建为 AngularJS,而不是现在使用 Zend Framework 2 MvC 耦合布局和视图。但是出于这个原因,模型和控制器具有各自的路由存在,并且它们使用具有大量业务逻辑的服务。
如果我要通过 Apigility 向这个现有项目添加一个 API,例如,让外部第三方能够访问帐户信息,我应该如何在不干扰我当前控制器路由的情况下做到这一点?
Apigility 管理 UI 会自动创建附加基本 url (www.domain.com/[api url]) 的路由。当我有一个带有 /account 路由的 AccountController 和一个使用 /accounts/[:accountId] 的 API 路由时,这不会直接冲突,但肯定会发生错误。
我应该使用像 api.domain.com 这样的 url,但是 Apigility 管理 UI 会自动添加路由,并且据我所知,没有通过子域“api”创建subdomain route 的选项。当然,我可以在每次通过 Admin UI 进行更改时修改自动生成的路由,但这似乎很麻烦并且容易出错。
【问题讨论】:
-
也许你想多了。每个 Apigility 服务都存在于一个模块中,该模块具有区分它的基本路线。如果您添加一个新服务,它会创建一个新模块,例如
Api。然后,您的新 Api 模块可以共享您现有的模型。如果您对现有的包含逻辑的控制器很认真,这是您应该修复的代码异味。将任何控制器逻辑重构为可以由新的 Api 控制器和现有的 Mvc 控制器共享的服务。 -
是的,我知道每个服务都存在于一个模块中。那不是我关心的问题。我只是想找到一种方法来很好地从现有路由(例如 /user/(我现有的用户路径及其子路径)和 /users/(由 Apigility 用户服务创建)创建不同的基本路由。我不想只有一个基本路由,但是一个以子域为基本(api.example.com/[apiroutes])路由的主机名。我并不是说我的控制器本身有逻辑,只有服务等。我错误地表达了这一点。
-
那么这个问题真的是关于如何将多个子域路由到同一个项目中,并让不同的模块处理基于子域的路由?如果是这样,我会简化您的问题,因为它与 Apigility 无关。见framework.zend.com/manual/current/en/modules/…
-
不,因为我上面提到的链接已经给了我解决方案。但在 IRC 上阅读此内容后,其他人非常友好地给了我一个正确的答案。不过,在这里给你荣誉,我想多了。
-
酷,也许可以简化您的问题,然后在此处记录答案?
标签: php zend-framework doctrine-orm zend-framework2 laminas-api-tools