2011-05-04 58 views
2

在我的ZF项目的application.ini中,我设置了“resources.frontController.params.displayExceptions = 1”。但是,如果抛出异常,则浏览器中不会显示异常。Zend Framework - displayExceptions属性不起作用

综观生成的ErrorController.php的代码,它看起来像这行:

如果($这个 - > getInvokeArg( 'displayExceptions')==真)

总是失败,这条件。

我是新来的采埃孚,所以有可能是明显的我失踪 - 但我不知道为什么它没有被设置。它似乎正在处理application.ini文件,因为如果连接不到数据库,它将无法连接到我的数据库。


编辑

就发现了线索:

我改变了我的modules目录。我刚刚撤消了这一改变,并且这个问题不再发生。但是,我确实想要更改模块目录。下面是我所作的更改的列表:

在我的application.ini,我说:

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 

在我的Bootstrap类,我说:

protected function _initFrontController() 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    $front->addModuleDirectory(dirname(__FILE__) . '/modules'); 
    $front->setDefaultModule('frontend'); 

    return $front; 
} 

这似乎成功地处理该模块的新位置和网站工作正常(除了displayExceptions标志没有正确设置)。

任何想法,为什么这会导致此症状?

+0

是什么调试器告诉你吗?或Zend_Debug ::转储()这些变量? – markus 2011-05-04 13:36:33

+0

@markus我应该看什么变量?对不起,我是ZF的新手,所以不太确定如何以编程方式访问这些application.ini设置。我尝试抛出Zend_Controller_Front :: getInstance() - > getParams(),但没有任何有用的东西。 – Dan 2011-05-04 14:21:53

+0

什么是您的应用程序环境?通常它应该设置为'development'以显示异常。 – Vika 2011-05-04 14:24:25

回答

0

终于搞定了。我的引导程序初始化发生顺序错误。

protected function _initFrontController() 
{ 
    $front = Zend_Controller_Front::getInstance(); 
    $front->addModuleDirectory(dirname(__FILE__) . '/modules'); 
    $front->setDefaultModule('frontend'); 

    return $front; 
} 

然后,而不是把第一的三行在_initAutoLoad以上方法,我把我的自动加载设置:我通过完全去除这种引导方式固定它。

4

我有_initAutoload在自举文件

$modelLoader = new Zend_Application_Module_Autoloader (array (
       'namespace' => '', 
       'basePath' => APPLICATION_PATH . '/modules/default')); 

和的application.ini

resources.frontController.moduleDirectory = APPLICATION_PATH "/modules" 
resources.modules = '' 
resources.frontController.params.displayExceptions = 1 

,它为我工作得很好。看起来你的模块配置不正确。不过,我使用cli工具创建了m zf项目,它可以完成所有配置。


其实suppressNotFoundWarnings(false)当我遇到这个问题时解决了它。但是我发现可能的出版物Display php errors when using Zend frameworkHow do I display exception errors thrown by Zend frameworkZend Framework - not all errors are shown

祝你好运!


这可能会解决您的问题。在_initAutoload功能您的应用程序的自举文件中添加以下语句

Zend_Loader_Autoloader::getInstance()->suppressNotFoundWarnings(false); 

当开发模式,则新的自动加载磁带机实际上将告诉你的语法错误是什么,而不是向您展示一个白色的页面。


也许您在application.ini文件中缺少更多信息。在我的application.ini中我有

[testing : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 

[development : production] 
phpSettings.display_startup_errors = 1 
phpSettings.display_errors = 1 
resources.frontController.params.displayExceptions = 1 
+0

我也有这些设置。 – Dan 2011-05-04 14:19:57

+0

好吧,看看我的更新。 – 2011-05-04 15:34:42

+0

不幸的是,这也行不通:我会尝试做一些挖掘Zend代码,看看它在底下做什么。 – Dan 2011-05-04 18:20:23

1

我有这个相同的问题,并将其追溯到.ini文件。

对我来说,由于.ini文件的区分大小写,因此.ini中的displayExceptions值没有在ErrorController中读取。

尝试将“frontController”的所有实例更改为“frontcontroller”(从控制器中的C中删除大写),它应该可以解决您的问题。

前:

resources.frontController.params.displayExceptions = 1 

后(小写C):

resources.frontcontroller.params.displayExceptions = 1