0

我在自己编写的 MVC 框架中遇到了一点问题。当我将表单发布到另一个页面时,我想在那里显示警报。

例如:我在我的 mvc 框架中构建了一个博客。这里有 3 个控制器/方法:'blog/overview'、'blog/addPost'、'blog/deletePost'。当我在方法'blog/addPost'中时,它会调用一个具有如下形式的视图:

<form action="blog/overview/" method="post">
  <input type="text" name="title" />
  <input type="text" name="post" />
  <input type="submit" name="addPost" />
</form>

如您所见,我正在发布到方法“博客/概述”。当表单发布并成功添加博客时,我希望能够显示一条警报,显示“博客文章已成功添加”。在“博客/概述”视图中。

这是否意味着如果有帖子,我必须检查方法“博客/概述”,以及它来自哪里?因为我想在删除博客文章时做同样的事情。这意味着我必须检查“博客/概述”中已经存在的两件事。在我看来,这不是正确的做法。

有人可以告诉我这是怎么做到的吗?

4

2 回答 2

1

我总是做的是检查哪个按钮被按下了

   if(isset($_POST['addPost'])){
    //do something
    header("Location: /blog/overview/");
   }

这样做是如果按下了 addPost 提交按钮,它只会运行 if 语句中的代码。这样,如果表单上有两个按钮,则可以根据按下的按钮运行不同的代码。我希望这有助于/回答你的问题。

于 2012-11-21T22:00:55.343 回答
1

任何(正确的)表单提交都遵循Post/Redirect/Get模式,将其分为两个主要部分(阶段),必须应用于更大的 MVC 设计模式:

  • 第一阶段:POST-REDIRECT

    该表格应以<form action="/blog/addPost" method="post">. 这将调用addPost()控制器中的方法,该方法将必要的信息传递给模型层中的服务,该服务负责管理文章。

    所述服务试图将您的文章保存在您使用的任何形式的永久存储中。如果此操作失败,服务会保存错误状态(通常在会话中)。如果操作成功,服务会将“最后一次操作”存储在会话中的某个位置,以便稍后恢复。

    然后查看,发现模型层发生了新的变化,并/blog/overview通过生成响应重定向到,该响应仅包含 HTTP 位置标头。

  • 第二阶段:GET

    调用控制器overview方法,但只是出于礼貌。

    当视图接收到产生响应的命令时,它首先请求模型层(很可能是用于管理文章库的同一服务),是否存在错误状态集。

    服务尝试从会话中恢复错误状态,如果之前存储过,则返回以查看错误代码。

    View 为概览组装 HTML 响应,如果模型层返回错误代码,则用于创建所述 HTML 的模板之一包含用于显示错误消息的片段。

    如果没有错误,视图可以请求模型层进行最后一次更改或最后一次操作,在成功发布后,您也可以将其存储在会话中。这种方式视图会知道有一些先前的操作已经完成,并且它还必须为“成功添加/删除”消息添加模板。

这将是简化的逐步过程。您必须了解 MVC 和受 MVC 启发的模式是为在复杂的应用程序中提供结构而设计的,而您的博客可能过于简单,因此选择 MVC 设计模式可能不像您想象的那样务实。

于 2012-11-21T22:35:34.813 回答