【发布时间】:2015-11-02 22:29:04
【问题描述】:
我正在考虑使用 Symfony 创建一个 RESTful api。我希望我的应用程序只接受 json 和/或 xml 并且只输出。我希望我的前端在一个单独的目录中完全独立。
免责声明:我知道大多数框架只声称是 MVC,并且 MVC 的定义/原则因开发人员而异。因此,我阐述了我对 MVC 的理解。
我如何描绘 MVC(取自 Martin Fowler):
- 在表示(视图和控制器)和域(模型)之间建立强有力的分离
- 控制器和视图应该(大部分)不直接通信,而是通过模型进行通信。
- 让视图(和控制器)观察模型以允许多个小部件更新而无需直接通信 - 观察者同步。
在 Symfony 中,Controller 返回一个 Response,实际上并没有 View 类。他们将两者结合在一起。
我的问题是:
- 是否可以将控制器分离为控制器和视图?
- 你能让控制器不返回东西吗?
- 可能在应用程序/捆绑包中没有任何 html/模板?
- 如前所述,我希望将前端完全分开,因此,我不会使用 twig。我会使用 JS、SASS、React 等作为前端的东西来对我的 Symfony api 进行 ajax 调用。
【问题讨论】:
-
"你能让控制器不返回东西吗?" --- 调用者如何知道请求是否被接受?
-
Symfony 支持通过事件查看视图:symfony.com/doc/current/reference/events.html#kernel-view。但是,我认为您过度设计了东西。除非您有充分的理由,否则只需让控制器返回 json 响应即可。
-
正如@Cerad 所说,您可以从控制器返回一些“数据”并使用 kernel.view 上的侦听器将其转换为表示形式。例如,FOSRestBundle 会执行此操作(但您可以自己实现)。如果您只是构建 API,则不需要任何模板。
-
@zerkms 我对 Symfony 了解不多,因此无法正确回答。我过去的做法是不让控制器返回某些内容,并让视图被称为与控制器相同的视图(通过使用 uri),然后让视图调用模型以获取已加载的必要数据(与否)由控制器对请求做出反应。
标签: php api rest symfony model-view-controller