如何在提交不成功ZF 1.12后装饰表格

时间:2013-01-24 19:52:56

标签: php zend-framework decorator zend-decorators

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

  1. 我应该创建一个控制表单的模型吗?如果表单!isValid()应该从那里生成表单来设置其他装饰器吗?
  2. 我应该在会话中设置所有内容并在渲染视图并装饰后清除它们吗?
  3. 或者我应该使用其他一些神秘方法吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

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

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

有关flashMessenger的更多信息。

答案 1 :(得分: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 ?>

但是当面对定义另一个装饰器,设置装饰器前缀,然后将其添加到表单时,我承认我通常便宜并使用控制器中的标志。

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