Symfony2 Web服务

时间:2014-10-27 21:45:14

标签: php symfony

我目前正在设计一个基于Symfony Framework的新Web应用程序,该应用程序将同时提供Web和移动访问。为了便于说明,我将使用Symfony框架中的默认AcmeDemoBundle来详细说明我的问题。

所以,DemoBundle给了我以下路线:

/hello/{name}

到目前为止一切顺利。现在,我想在这个项目中实现一个API,它将为移动应用程序提供服务,因此与上述路由相同的控制器的路由应该是,例如:

/api/v1/hello/{name}

我的疑问是:如果不复制代码,最好的方法是什么?我打算使用FOSRestBundle作为API,我知道他处理渲染HTML视图,但我想像以前那样将API路由与Web分开。我可能应该为API创建一个新的捆绑包吗?

1 个答案:

答案 0 :(得分:0)

为API创建一个捆绑包不是一个好习惯,原因很简单,因为您无法在其他项目中轻松地重用捆绑包。

例如,您为A项目创建PostBundle及其API包APIPostBundle。 如果要将该捆绑包用于B项目,则需要PostBundle和APIPostBundle。您在两个捆绑包之间创建了依赖关系,这是一种不好的做法(Component-Based Development).

因此,您必须生成一个具有强度体系结构的独立包,如果必须,可以允许您进行少量修改。 使用服务获取逻辑指令。然后,controller/APIController可以管理路由并调用服务方法。通过这种方式,您可以在不编辑控制器的情况下修改服务。

所以,你的架构看起来像这样:

PostBundle
  Controller
    - PostController
    - APIPostController 
  Service
    - PostService
    - PostServiceInterface