当前位置:  开发笔记 > 编程语言 > 正文

动作助手是否有钩子自动运行,抛出异常与否?

如何解决《动作助手是否有钩子自动运行,抛出异常与否?》经验,为你挑选了1个好方法。

更新

想要使用每个控制器运行一些代码,并被告知使用Action Helpers或插件而不是从基本控制器扩展,我决定使用Action Helper而不是插件,@Bittarman(Ryan Mauger)的优秀幻灯片;

Zend Framework,掌握: http ://www.slideshare.net/rmauger/zend-framework-getting-to-grips参见幻灯片22:(动作助手)抛出的异常前/后调度停止进一步执行......

虽然它会停止进一步执行,但没有发现异常.我一直试图调试这几个小时,但没有到达任何地方.

如果您运行以下代码,您是否看到异常被捕获或是否从错误控制器中逃脱?

我试图弄清楚Zend Framework是否表现不如预期,或者我是否完全搞砸了(更有可能).

我试图把它分解成最简单的情况来复制,让我知道你看到了什么:

/*添加到此处的现有Bootstrap:APPLICATION_PATH/Bootstrap.php*/

protected function _initActionHelpers()
{
    Zend_Controller_Action_HelperBroker::addPath(APPLICATION_PATH .'/controllers/helpers');
    //hooks cause action helper to autorun: http://akrabat.com/zend-framework/hooks-in-action-helpers/
    $hooks = Zend_Controller_Action_HelperBroker::getStaticHelper('Test');
    Zend_Controller_Action_HelperBroker::addHelper($hooks);
}

/*in:APPLICATION_PATH/controllers/helpers/Test.php*/



更新: 好的,我一直在通过xDebug + Eclipse运行这个......(或者是那个或者玩得很开心,不知道我是否选择了更愉快的体验)....我发现了一些奇怪的东西.

preDispatch正在运行两次!在第二次调用时,它将转到Zend_Controller_Plugin/ErrorHandler.php,它运行此代码:

if ($this->_isInsideErrorHandlerLoop) {
    $exceptions = $response->getException();
    if (count($exceptions) > $this->_exceptionCountAtFirstEncounter) {
        // Exception thrown by error handler; tell the front controller to throw it
        $frontController->throwExceptions(true);
        throw array_pop($exceptions);
    }
}

通过将throw Exceptions设置为true,它不再被捕获.而且我怀疑这是为了保存循环($ this - > _ isInsideErrorHandlerLoop也是一个微妙的线索;)

为什么它在循环中?



1> joedevon..:

好的,@ Bittarman在IRC的#ZFTalk上给了我答案.在这里(并且道歉,我将自己的答案标记为正确..但我不想在这里写出更多的错误).

if( ($this->getRequest()->getActionName() == 'error') && ($this->getRequest()->getControllerName() == 'error')) {
    return;
}

原因是错误处理程序必须在错误处理程序循环中禁用自身(通过将throw异常设置为true).因此,您必须确保错误控制器中不会发生异常情况.

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有