【问题标题】:Is it possible to separate Controller and View in RESTful Symfony app?是否可以在 RESTful Symfony 应用程序中分离控制器和视图?
【发布时间】: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


【解决方案1】:

您正在尝试做的是一个非常标准的架构。

您不需要使用模板,但您的控制器必须返回“某物”。如果你在前端处理视图,这只是创建这个视图所需的数据,通常是 json 的形式

Symfony 可以做到这一点,没问题

【讨论】:

    猜你喜欢
    • 2015-07-21
    • 2017-07-05
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 2014-07-01
    相关资源
    最近更新 更多