Symfony 2:抽象数据输入,以允许多个控制器,一个模型


Symfony 2: Abstracting data input in order to allow many controllers, one model

我目前正在努力寻找一个合适的系统架构,但我想我需要Symfony专家的一些帮助。我正在构建一个非常简单的应用程序,有两个接口:正常的web应用程序(HTML表单等)和RESTful API。两者并不相同,但它们共享许多CRUD操作。

我有两个bundle,每个bundle包含特定于每个接口的controller。其中一个使用Form组件创建和验证表单,另一个只是以发送的任何格式(JSON或XML)解析来自请求的数据。然而,这很糟糕。这两个接口之间有很多共享代码,比如参数绑定和验证。虽然模型是相同的,但我从用户那里接收数据并与模型交互的方式是纯反dry的。

是否有一种方法将输入绑定和验证带入单个抽象操作中?我首先创建了一个类,它接收来自每个控制器的Request对象,验证每个参数并与模型通信。它在API中工作得很好,但它完全失去了Form组件的优势。

你可以尝试为每个操作使用2个不同的路由,但要去相同的实际操作

blah_blah.blahbadeblah:
    pattern: /blah/
    defaults:
        _controller: "BlahBlahBundle:Blah:index"
        json: false
blah_blah.blahbadeblah_json:
    pattern: /json/blah/
    defaults:
        _controller: "BlahBlahBundle:Blah:index"
        json: true

然后你可以在json的控制器末尾做一个检查,然后用完整的模板或包含最小的东西的JsonResponse来响应。