不存在的模型类属性,没有错误,ZendFramework

时间:2015-08-05 18:26:29

标签: php zend-framework properties error-handling socialengine

我们正在使用使用ZendFramework生成的SocialEngine。这不是关于SocialEngine的直接问题,尽管它有关系。这不是关于ZendFramework的具体问题;我想这里的课程广泛适用于大多数PhP MVC框架。

我们遇到一个问题,显然在高负荷条件下,网站的某些部分停止显示。例如,整个小部件的内容将无法加载而没有任何明显的错误。诊断问题时没有错误让我发疯。

这完全不是关于加载或优化的问题。

我可以通过从ZendFramework视图,模型或控制器调用一个不存在的类属性来重现类似的问题,例如:

<?php echo $this->article->fubar; ?>

此时,它所属的小部件将无法显示而没有任何明显的错误。当小部件本身是页面的主要显示部分时,这是有问题的。

我怀疑这些问题最终是由一个尚未初始化的类变量引起的,但是代码库太大而无法识别没有更好的错误报告的地方。它也可能是链式对象失败的结果,例如类似的东西:

<?php $this->article->getCategory()->getTitle(); ?>
如果getCategory()方法返回null,

......理论上可能会导致这种行为。

此外,我认为错误报告的缺乏是由ZendFramework数据模型中的“魔术”属性引起的,它允许动态类属性,这样如果数据模型有一些字段“blablabla”,$ this-&gt; article-&gt; blablabla填充了该字段的内容。但是,如果要访问的属性不是数据库字段,则这种神奇的行为对此没有多大帮助,特别是如果它禁用了正常的错误报告。这也解释了为什么$ this-&gt; article-&gt; fubar();导致窗口小部件无法以相同的方式加载。

面对这种行为时,如何从ZendFramework中获得准确的错误?

1 个答案:

答案 0 :(得分:0)

您是否尝试通过将以下代码放在控制器的操作或窗口小部件控制器文件中来捕获错误?

error_reporting(E_ALL);
ini_set('display_errors', TRUE);

您的某些文章可能与某个类别或相关类别无关,但可能已从类别表中删除,因此$ this-&gt; article() - &gt; getCategory()将为空。如果类别是文章的必填字段并且类别表中存在类别,则不应该发生。您可以通过对此类代码执行!empty()/ instanceof检查来避免错误。