Php Zend框架如何处理异常

Php Zend框架如何处理异常,php,zend-framework,exception,Php,Zend Framework,Exception,在以下情况下引发异常的最佳实践是什么: 我的URL结构是: /文章/view/id/1 我的控制器: 自动控制器 此控制器将加载映射器模型: 应用程序\模型\映射器\文章 在这个模型中,我汇总了各种数据。我检查了这个模型中的几个标准,以决定是抛出404错误还是显示文章 如果我决定抛出错误。我该怎么做 我的第一个猜测是从模型中抛出它。但是没有默认的“Model_Exception”类,并且有一个“Zend_Controller_Action_Exception”。我应该从模型中抛出这个异常吗?或者

在以下情况下引发异常的最佳实践是什么:

我的URL结构是: /文章/view/id/1

我的控制器: 自动控制器

此控制器将加载映射器模型: 应用程序\模型\映射器\文章

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

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


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

您可以创建一个
应用程序\u模型\u映射器\u文章\u异常
,您可以选择在控制器中处理该错误并向错误控制器抛出异常,或者使用您的异常代码指定要设置的HTTP响应代码的类型。

您可以创建一个
应用程序\u模型\u映射器\u文章\u异常
,您可以选择在控制器中处理该异常,并向错误控制器抛出异常,或者使用异常代码指定要设置的HTTP响应代码的类型。

模型本身不应干扰FrontController,因此可以从控制器中抛出异常


您可以从模型中抛出异常(不是
Zend\u Controller\u Action\u exception
,而是一些更准确地描述您的问题的异常),在控制器中捕获它,并在此基础上决定是否抛出
Zend\u Controller\u Action\u exception

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


您可以从模型中抛出异常(不是
Zend\u Controller\u Action\u exception
,而是一些更准确地描述您的问题的异常),在控制器中捕获它,并在此基础上决定是否抛出
Zend\u Controller\u Action\u exception

谢谢您的帮助。然后我将从控制器抛出错误。我的文章模型相当复杂。对于更简单的模型,我应该做什么。仅当内容被删除时才能引发错误的模型。这不值得创建一个特殊的异常类,对吗?还是应该在模型中创建isValid()类型的函数?并将其包含在所有尝试加载内容的控制器/操作中。似乎有很多额外的代码……如果创建新的异常类是否值得,这取决于您:)但是,请查看现有的Zend异常、SPL异常()或者您可能会抛出一个普通异常。至于验证它,通常您可以只在模型中抛出异常,但请确保抛出异常的方法在try-catch块中执行。Java的排序更好,因为方法(其结果可能是异常)必须用“throws My_Kind_Of_exception”声明。谢谢您的帮助。然后我将从控制器抛出错误。我的文章模型相当复杂。对于更简单的模型,我应该做什么。仅当内容被删除时才能引发错误的模型。这不值得创建一个特殊的异常类,对吗?还是应该在模型中创建isValid()类型的函数?并将其包含在所有尝试加载内容的控制器/操作中。似乎有很多额外的代码……如果创建新的异常类是否值得,这取决于您:)但是,请查看现有的Zend异常、SPL异常()或者您可能会抛出一个普通异常。至于验证它,通常您可以只在模型中抛出异常,但请确保抛出异常的方法在try-catch块中执行。Java的排序更好,因为方法(其结果可能是异常)必须用“抛出我的异常类型”声明。你确定我可以在异常模型中转发和/或设置响应代码吗?如果是这样的话,我可能会提出一些可能在多个模型中发生的一般异常。也;我应该将异常代码放在哪里?仅在models文件夹中?请查看
Zend\u Controller\u Plugin\u ErrorHandler
的文档,以及错误控制器配置为将特定异常代码转换为404错误的方式。对于模型异常,您应该在Articles.php类所在的位置创建一个名为Articles的文件夹,并将代码放在exception.php中;这样自动加载器就可以拾取它。你确定我可以在异常模型中转发和/或设置响应代码吗?如果是这样的话,我可能会提出一些可能在多个模型中发生的一般异常。也;我应该将异常代码放在哪里?仅在models文件夹中?请查看
Zend\u Controller\u Plugin\u ErrorHandler
的文档,以及错误控制器配置为将特定异常代码转换为404错误的方式。对于模型异常,您应该在Articles.php类所在的位置创建一个名为Articles的文件夹,并将代码放在exception.php中;这样自动装弹机就可以把它捡起来。