2

我真的是 ZF 的新手,在用户提交表单(例如登录表单)后,谷歌搜索了一下以找到一种装饰登录表单的方法。在提交和处理后,如果它无效,我想在填写不正确的字段上方显示 twitter bootstraps 警报。

  1. 我是否应该创建一个控制表单的模型,以及表单是否!isValid()应该从那里生成表单并设置额外的装饰器?
  2. 我应该在渲染视图和装饰后设置会话中的所有内容并清除它们的变量吗?
  3. 还是我应该使用其他一些神秘的方法?
4

2 回答 2

1

这些是我用来显示错误消息的方法:

我在所有字段上都保留了标准错误装饰器未更改以显示特定消息(即:无效电子邮件)

我还使用flashMessenger来显示一般消息,例如

Errors occured while validating the form:
* Email
* ...

flashMessenger是一个具有等效视图助手的动作助手。这flashMessenger 是一个单跳会话消息,一旦显示就会自动从会话中清除

更多关于flashMessenger的信息。

于 2013-01-24T21:12:05.593 回答
1

我倾向于将错误与它们的元素保持一致。但是,像你一样,我也更喜欢在顶部有一个表单级别的警报,向用户表明有一些东西需要修复。

为此,我通常在我的控制器中添加一个标志:

if ($form->isValid($postData)){
   // write to db and redirect
} else {
    $this->view->hasFormError = true;
}
$this->view->form = $form;

然后在视图脚本中:

<?php if ($this->hasFormError): ?>
<!-- my alert box, using Bootstrap or whatever -->
<?php endif; ?>
<?= $this->form ?>

几乎可以肯定,将FormError装饰器添加到表单本身会更巧妙。它检查是否有任何表单元素有错误,然后呈现警报。然后你的控制器和你的视图脚本变得更精简:

控制器:

if ($form->isValid($postData)){
   // write to db and redirect
}
$this->view->form = $form;

查看脚本:

<?= $this->form ?>

但是当面对定义另一个装饰器,设置装饰器前缀,然后将其添加到表单时,我承认我通常会使用 in-controller 标志。

[原则上,我认为应用装饰器的整个想法应该是视图层的一部分,而不是表单定义本身的一部分。在这种理念下,​​我会保持表单未装饰,直到我们点击视图脚本,此时我们可以应用一些添加所有装饰器的视图助手。这是 - 从某种修改的意义上说 - ZF2 所做的。但我从来没有时间把这条路走得太深。]

于 2013-01-25T07:25:24.473 回答