gpt4 book ai didi

php - 不存在的模型类属性,无错误和Zend Framework

转载 作者:行者123 更新时间:2023-12-03 08:54:05 26 4
gpt4 key购买 nike

我们使用的是使用ZendFramework制作的SocialEngine。尽管它与社交引擎有关,但这不是直接的问题。这也不是关于ZendFramework的具体问题。我想这里的类(class)广泛适用于大多数PhP MVC框架。

我们有一个问题,显然在高负载的情况下,网站的某些部分停止显示。例如,整个窗口小部件的内容将无法加载而没有任何明显的错误。缺乏错误来诊断问题,这使我发疯。

这根本不是关于负载或优化的问题。

我可以通过从ZendFramework View ,模型或 Controller 中调用不存在的类属性来重现类似的问题,例如:

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

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

我怀疑这些问题最终是由尚未初始化的类变量引起的,但是代码库太大,无法识别哪里没有更好的错误报告。这也可能是链状对象故障的结果,例如就像是:
<?php $this->article->getCategory()->getTitle(); ?>

从理论上讲,如果getCategory()方法返回null,则可能导致此行为。

此外,我认为缺少错误报告是由ZendFramework数据模型中的“魔术”属性引起的,该属性允许动态类属性,例如,如果数据模型具有某些字段“blablabla”,则$ this-> article-> blablabla用该字段的内容填充。但是,如果要访问的属性不是数据库字段,那么这种神奇的行为将无济于事,尤其是当它禁用正常的错误报告时。这也解释了为什么$ this-> article-> fubar();导致小部件无法以相同方式加载。

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

最佳答案

您是否试图通过将以下代码放入 Controller 的 Action 或窗口小部件 Controller 文件中来捕获错误?

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

您的某些文章可能与任何类别都不相关,或者有关联的类别已从类别表中删除,因此$ this-> article()-> getCategory()为空。如果商品的必填字段为category,并且category表中存在category,则不会发生这种情况。您可以通过对此类代码进行!empty()/instanceof检查来避免该错误。

关于php - 不存在的模型类属性,无错误和Zend Framework,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31840093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com