【问题标题】:questions on header in MVCMVC中关于header的问题
【发布时间】:2012-06-18 08:22:14
【问题描述】:

在 MVC 框架中,负责定义标头的是控制器还是视图?

想象一下下载文件的情况,会有渲染内容,所以我想控制器会设置适当的标题来下载,对吗?

另一点是我对哑剧有疑问... 默认情况下我们使用text / html; charset = UTF-8, 另一个是设置要下载的文件的mime类型,这样对吗?

【问题讨论】:

    标签: php model-view-controller header mime


    【解决方案1】:

    所有的表示逻辑都是视图实例的责任。即使您使用 MVP 模式,这也适用,其中视图是被动实体视图(“被动”并不意味着“愚蠢”或“只是模板”)。

    Controller 应该只负责改变模型层和当前视图的状态。

    【讨论】:

    • 如果我有下载请求,我只有设置标题类型的视图?
    • 是的。它向模型层询问文件详细信息,并根据响应生成错误页面或启动下载。
    • 所以要完成这个问题......然后渲染一个完整的页面,使用“text / html”和其余的 mime 用于下载,对吗?奥布里加多
    • @PapaCharlie,在某些情况下,您还会发送重定向标头,或者可能是 json 响应的 mime 类型。
    【解决方案2】:
    1. 正确,控制器应该“决定”哪个是合适的标头
    2. Content-type 是您要更改的标头。

    【讨论】:

    • 控制器的职责是处理输入,而不是决定输出
    • @Gordon :我通常(默默地)同意你的观点,但在这里,我认为这是错误的。以 j2ee 为例。控制器负责“请求”和“响应”。它不控制视图 inside 的内容,但它控制 what 的输出(主要是标题)。在很多 PHP 框架中也是如此(例如 symfony)
    • 你说它控制应用程序,并且是一个请求并设置状态200(ok)或404(未找到)。在这种情况下,他会收到内容并发送视图进行渲染,对吗?
    • @Shikiryu 是和否。确实,让控制器在 基于 Web 的 MVC 框架中创建响应是常见的做法。虽然这是一个实现细节。 MVC 中没有协议或传递机制的概念。它只是说“将用户交互分为三个不同的角色”(至少如果您遵循 POEAA 定义)。所以根据定义,HTTP Request 和 HTTP Response 不是 MVC 问题域的一部分。
    • @Gordon 我同意这一点。在适用时遵循定义和规范很好)。但我们正在开发网络应用程序。如果定义没有考虑到您的需要,您需要自己做。这就是所有基于 Web 的“MVC”所做的。即使没有它们,我们也需要考虑请求和响应。就个人而言,我习惯于管理控制器中的标题(或通过控制器,例如$this->view->setHeader()。您更改了视图但 in 控制器),我仍然认为它是合乎逻辑的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多