Zend framework Zend不同的视图脚本?

Zend framework Zend不同的视图脚本?,zend-framework,zend-view,zend-controller,Zend Framework,Zend View,Zend Controller,我有一个控制器,它将表单的输入传递到模型类以执行验证。 如果验证成功,我希望允许流继续并呈现与控制器关联的默认视图 我的问题是,如果验证不成功,那么我希望模型传回验证错误消息,并在单独的视图中显示它们。如何在备选视图上设置错误消息 提前感谢。为什么要在其他视图中显示错误消息?为什么不在视图中构建条件呢?类似于若窗体有错误,则回显消息,否则回显窗体 您可以使用$this->\u forward以其各自的视图转发到另一个操作。你可以随意传递。只需传递表单对象,它包含所有错误消息。或者,您可以从表单对

我有一个控制器,它将表单的输入传递到模型类以执行验证。 如果验证成功,我希望允许流继续并呈现与控制器关联的默认视图

我的问题是,如果验证不成功,那么我希望模型传回验证错误消息,并在单独的视图中显示它们。如何在备选视图上设置错误消息


提前感谢。

为什么要在其他视图中显示错误消息?为什么不在视图中构建条件呢?类似于若窗体有错误,则回显消息,否则回显窗体


您可以使用$this->\u forward以其各自的视图转发到另一个操作。你可以随意传递。只需传递表单对象,它包含所有错误消息。或者,您可以从表单对象中检索某些错误消息或所有错误消息,并将它们传递给视图或操作

那么,您可以从控制器将它们重定向到另一个控制器中的另一个操作:

$this->_forward($newactionname,
                        $newcontrollername,
                        $newmodulename,
                        Array($parameters_to_pass);
    }
或者只渲染不同的视图文件:

$this->render('index_alternative');

FlashMessenger可能是解决方案的一部分? 如果要重定向到同一控制器中的操作,请不要使用_forward(),只需使用$this->fooAction()直接调用该操作,而不是使用此->_forward('foo')

原因是由于正在构造的控制器可能导致的性能和错误。当您调用_forward时,不仅会再次运行predispatch(这是意料之中的事情),还会调用init()构造函数也会再次被调用。如果您的控制器从其他控制器扩展,那么所有这些控制器也会被调用,包括它们的init()。如果您的init()中有代码它将运行两次,如果您正在写入数据库,它将写入行两次!避免整个操作,直接调用该操作,而是使用$this->render()


如果您分析代码,您很容易看到这个问题,

可能应该使用相同的视图。在验证方法中,我根据验证失败的内容返回一条错误消息,例如找不到项目,项目超出日期范围。如果通过,我将返回空值,然后在视图中检查验证返回的值是否不为空?这是什么您的意思是,您似乎在手动执行验证检查。但这就是验证器存在的原因,然后您只需要调用$form->isValid()为了知道是否所有测试都已通过。如果您需要ZF不提供的验证器,您可以编写自己的自定义验证器,并以与内置验证器完全相同的方式插入它们。例如,您可以检查($form->isValid())然后发送错误消息,如果您希望使用$form->populate并将填充的表单发送到视图,还可以发送一条成功消息。此外,您还可以始终在视图中进行检查。例如,如果($form->hasrerrors)显示这个,否则显示那个。(!pseudo code!)很酷。我现在就知道了。我现在将查看自定义验证器。