ZF2 - 在bootstrap模式中的验证

时间:2014-03-15 00:39:07

标签: twitter-bootstrap zend-framework2

我在zf2应用程序中使用twitter bootstrap。引导模式显示包含用户详细信息的表单,我希望对其进行编辑和保存。如果我只是在对话框中提交表单并重新加载整个页面,这是相当微不足道的,但我正在寻找一种方法来验证表单而不提交它,理想情况下,如果数据是有效的,它将传递新数据模式对话框关闭时的页面。

我怎么能这样做 - 它需要成为ajax电话吗?如果是这样,我如何在我的控制器中构造它以一种方式返回表单验证,以便在模态中呈现错误?

编辑1: 到目前为止,接受的答案是现货。

我唯一理解的是如何将验证数据从控制器传递回bootstrap模式。

因此,作为一个简单的工作流程 - 模式窗口打开时加载了一个绑定到用户模型的编辑表单,该模型显示了要编辑的用户数据(所有已预加载并已分配给视图)。提交模态表单,jquery挂钩到表单提交,并将数据作为ajax请求发送到UserController :: EditUserAction - 其中表单数据针对模型inputfilter进行验证。如果结果有效,则保存数据并关闭模态对话框。如果数据无效,比如将电子邮件地址更改为已存在的地址,则操作将返回一个表单为error(s)的JsonModel - 然后如何将其传递给引导模式以突出显示产生错误的字段,如通常在提交表单时ZF自动执行的方式?

2 个答案:

答案 0 :(得分:0)

你可以用ajax做到这一点。要了解控制器中的操作,您必须了解ajax调用的基本原理。 jQuery使这很容易。

<script>
$(function() {
  jQuery.ajax({
    type: method,
    dataType: 'json',
    url: url,
    data: data,
    error: function(jqXHR, textStatus, errorThrown) {
      // Do something to handle the error
    },
    success: function(data, textStatus, jqXHR) {
      // Do something else on successful validation
    }
  });
});
</script>

type是HTTP方法(例如'POST')。 url是您到达控制器的路线,它会给您回复。 data是要发送的表单数据。 更多文档位于https://api.jquery.com/jQuery.ajax/

如果HTTP响应代码在200中,则执行成功功能。 如果您发送400或500的HTTP响应代码,将执行错误函数中的javascript。这可用于在模态对话框中显示错误。

您可以使用以下代码修改控制器中的HTTP响应代码:

$this->getResponse()->setStatusCode(400);

其中400是HTTP响应代码(有关HTTP响应代码的详细信息,请参阅http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

然后,要通过回复发回数据,请在控制器中返回JsonModel而不是ViewModel

return new JsonModel($array);

其中$array是您要发送回浏览器的数据。

如果你最终这么做了,你可以调查zf2类\ Zend \ Mvc \ Controller \ AbstractRestfulController。

答案 1 :(得分:0)

如果您想在提交表单之前尝试验证(将数据发送到服务器)。可能更好地使用客户端验证。

http://www.rayfaddis.com/blog/2013/05/27/jquery-validation-with-twitter-bootstrap