【问题标题】:How to catch my own Model Exceptions in a Zend Framework Action如何在 Zend 框架操作中捕获我自己的模型异常
【发布时间】:2011-05-14 00:16:21
【问题描述】:

我有一个抛出 XMLDocument_Exception 的模型。在我的控制器操作中,我想包含一个 try catch 块,它可能会引发此异常,但由于某种原因它没有被捕获。

public function listissuesAction() {
    $publicationPid  = $this->_request->get('publicationPid');
    $this->getFrontController()->throwExceptions(true);
    try {
        $fedoraPublication = new FedoraMETSPublication($publicationPid);
    } catch (XMLDocument_Exception $e) {
        return $this->_forward('content/unavailable');
    }
}

模型抛出异常如下:

if ($mets) {
    $this->loadXML($mets);
} else {
    throw new XMLDocument_Exception('Failed to load METS Document from SOAP Server');
}   

FedoraMETSPublication 扩展了 FedoraMETS,后者扩展了 XMLDocument。上面的代码在 FedoraMETS 的构造函数中。

我看到以下错误:

Fatal error:  Uncaught exception 'XMLDocument_Exception' with message 'Failed to load METS Document from SOAP Server' in    2 /Users/dof/Sites/ccymod/trunk/application/models/Fedora/METS.php:21
Stack trace:
#0 /Users/dof/Sites/ccymod/trunk/application/models/Fedora/METS/Issue.php(16): FedoraMETS->__construct('llgc-id:1183037')
#1 /Users/dof/Sites/ccymod/trunk/application/models/Fedora/METS/Publication.php(44): FedoraMETSIssue->__construct('llgc-id:1183037')
#2 /Users/dof/Sites/ccymod/trunk/application/views/scripts/browse/listissues.phtml(19): FedoraMETSPublication->getIssues()
#3 /Users/dof/Sites/ccymod/trunk/lib/Zend/View.php(108): include('/Users/dof/Site...')
#4 /Users/dof/Sites/ccymod/trunk/lib/Zend/View/Abstract.php(831): Zend_View->_run('/Users/dof/Site...')
#5 /Users/dof/Sites/ccymod/trunk/lib/Zend/Controller/Action/Helper/ViewRenderer.php(903): Zend_View_Abstract->render('browse/listissu...')
#6 /Users/dof/Sites/ccymod/trunk/lib/Zend/Controller/Action/Helper/ViewRenderer.php(924): Zend_Controller_Action_Helper_ViewRend in /Users/dof/Sites/ccymod/trunk/application/models/Fedora/METS.php on line 21

为什么我没有在我的动作控制器中捕捉到这个异常?

【问题讨论】:

    标签: php zend-framework exception frameworks controller


    【解决方案1】:

    检查堆栈跟踪,#2:

    #2 /Users/dof/Sites/ccymod/trunk/application/views/scripts/browse/listissues.phtml(19): FedoraMETSPublication->getIssues()
    

    显然,异常被抛出给视图,而不是控制器。在视图中使用try...catch(或更改您的方法)。

    【讨论】:

    • 是的傻,我应该注意到了!谢谢大家了。
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 2011-10-13
    • 1970-01-01
    相关资源
    最近更新 更多