2011-07-26 93 views
0

什么是最好的做法在以下情况下抛出异常:Zend框架如何处理异常

我的URL结构是: /篇/图/ ID/1

我的控制器: AticlesController

而这个控制器加载一个映射模型: Application_Model_Mapper_Articles

在这个模型我汇总各类数据。我在这个模型中检查了几个标准来决定抛出404错误还是显示文章。

如果我决定抛出错误。我应该怎么做?

我的第一个猜测是从模型中抛出它。但是没有默认的'Model_Exception'类,并且有一个'Zend_Controller_Action_Exception'。我应该从模型中抛出这个异常吗?还是应该将错误消息从模型传回控制器,然后抛出错误?

回答

3

模型本身不应该干扰FrontController,所以是的,从控制器抛出异常。

你可以从模型中抛出一个异常(不是Zend_Controller_Action_Exception,但一些更准确地描述你的问题),在控制器中捕获它,然后决定是否抛出Zend_Controller_Action_Exception

+0

感谢您的帮助。那么我会从控制器中抛出错误。 我的文章模型相当复杂。我应该怎么做更简单的模型。内容被删除时只能引发错误的模型。那真的不值得创建一个特殊的异常类吗? 或者我应该在模型中创建一个isValid()类型的函数?并将其包含在所有尝试加载内容的控制器/操作中。看起来像很多额外的代码... – Erik

+0

如果值得创建新的异常类取决于你:)但是,看看现有的Zend异常,SPL异常(http://www.php.net/manual/en /spl.exceptions.php),或者你可以抛出一个普通的异常。 至于验证它,通常你可能会在模型中抛出一个异常,但要确保在try-catch块内执行抛出异常的方法。 Java的排序更好,因为方法的结果可能是一个异常,必须用'throws My_Kind_Of_Exception'声明。 – usoban

0

您可以创建一个Application_Model_Mapper_Articles_Exception,并且您可以选择在控制器中处理该事件,并向错误控制器抛出异常,或使用异常代码指定要设置的HTTP响应代码的类型。

+0

您确定我可以在异常模型中转发和/或设置响应代码? 如果是这样,我可以做一些一般的例外,可能发生在多个模型。 另外;我在哪里放置异常代码?只需在模型文件夹中? – Erik

+0

查看“Zend_Controller_Plugin_ErrorHandler”的文档以及错误控制器配置为将特定异常代码转换为404错误的方式。至于你的模型异常,你会创建一个名为Articles的文件夹,其中你的Articles.php类驻留在该文件夹中,并将代码放入Exception.php;这样自动加载机就可以把它拿起来。 – cmbuckley