Zend不同的视图脚本?

时间:2009-08-13 13:34:14

标签: zend-framework zend-view zend-controller

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

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

提前致谢。

4 个答案:

答案 0 :(得分:11)

好吧,从控制器你可以将它们重定向到另一个控制器中的另一个动作:

$this->_forward($newactionname,
                        $newcontrollername,
                        $newmodulename,
                        Array($parameters_to_pass);
    }

或者你只是渲染一个不同的视图文件:

$this->render('index_alternative');

答案 1 :(得分:9)

如果您要重定向到同一控制器中的操作,请不要使用_forward(),只需使用$ this-> fooAction()直接调用操作,而不是使用_-> _forward('foo'...

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

如果您对代码进行了分析,则可以轻松看到此问题,

答案 2 :(得分:4)

为什么要在不同的视图中显示错误消息?为什么不在视图中构建条件?像表单有错误然后回显消息,其他回声形式。

您可以使用$ this-> _forward转发到具有相应视图的其他操作。你可以传递任何你想要的东西。只需传递表单对象,它就包含所有错误消息。或者,您可以从表单对象中检索某些错误消息或所有错误消息,并将它们传递给视图或操作。

答案 3 :(得分:0)

FlashMessenger可能是解决方案的一部分吗? http://framework.zend.com/manual/en/zend.controller.actionhelpers.html