加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在Zend Framework应用程序中从模型/视图/控制器中抛出异

发布时间:2020-12-13 17:04:42 所属栏目:PHP教程 来源:网络整理
导读:在Zend Framework库中,当前的实践(大约1.10.8)是库组件抛出了扩展Zend_Exception的异常. 例如. Zend_Layout组件抛出Zend_Layout_Exception 在我自己的ZF库中,我正在添加自己的ZF组件或扩展现有组件,我正在抛出一个Mylibrary_Exception(它当然不是真的叫:) 我
在Zend Framework库中,当前的实践(大约1.10.8)是库组件抛出了扩展Zend_Exception的异常.

例如. Zend_Layout组件抛出Zend_Layout_Exception

在我自己的ZF库中,我正在添加自己的ZF组件或扩展现有组件,我正在抛出一个Mylibrary_Exception(它当然不是真的叫:)

我可以看到他们将在ZF 2.0中改变一些

http://framework.zend.com/wiki/display/ZFDEV2/Proposal+for+Exceptions+in+ZF2

我的实际问题是:

在我的控制器/模型/视图中的整个MVC应用程序中,如果我需要抛出异常(这将是罕见的,因为显然我将以不同的方式处理预期的错误) – 但是如果我确实需要抛出异常在这里,采埃孚的最佳做法是什么?

我应该

throw new Exception("this is an exception");

或者我应该在我的ZF模块中创建异常类,类似于ZF库的组织方式.即,每个库组件都有异常类,我是否应该为每个应用程序模块设置异常类?

application/modules/user/controllers/UserController.php

application/modules/user/forms/UserForm.php

application/modules/user/models/User.php

application/modules/user/views/scripts/index.phtml

application/modules/user/exceptions/Exception.php (class User_Exception)

application/modules/user/exceptions/SuperexampleException.php (class User_Exception_Superexample)

我以前从未见过有人在ZF做过这样的事情,所以我不确定这是不是一个好主意.

更新:

为了进一步澄清我的问题 – 当在应用程序的MVC部分(而不是库)中引发异常时 – 是否有关于使用特定异常类(如库所做的)与仅使用通用Exception类的约定?

解决方法

我建议有一些“通用”例外,如(InvalidParameter,InvalidRange)好的起点是 czech framework called Nette.

然后添加一些应用/用户/操作特定的例外 – 比如

> InvalidUserInputException – 用于用户输入无效值的状态(如eshop中的数量“-1”)
> NotFoundException – 用于未找到内容的状态
>等

将特殊成员变量添加到这些异常(如id或data),并使用它们将异常作为错误消息的传递.

$e = new NotFoundException('There is no user %s in here!');
$e->setUser('Frank');
throw $e;
// later in error controller
if ($e instanceof NotFoundException) {
    // set header to 404,display error message,etc
}

好的是你可以随意扩展异常并随意在错误控制器中捕获它们(更好的是它使用接口)

class AccessDeniedExceptionimplements ILogableException
//...
throw new AccessDeniedException();
//in EC
if ($e instanceof ILoggableException) {
    $this->getLogger()->log($e->getLogMessage());
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读