extbase域模型中的后初始化

时间:2013-11-24 22:33:04

标签: typo3 extbase

在我的一个extbase模型中,我想初始化从数据库中保存的属性派生的一些属性。这些虚拟属性的计算非常耗时,因此我想缓存它们。因此,我的程序流应该看起来像这样:

  1. 照常从数据库中加载域对象
  2. 检查虚拟属性是否在缓存中可用。如果是这样,从那里获取它,否则计算并缓存它。
  3. 我首先想到了方法" initializeObject"是我需要的,但它不是:它是在从数据库初始化任何属性之前调用的。所以我提出了另外两种方法:

    1. 我可以在获取对象后从存储库手动调用初始化方法,但这看起来很奇怪,如果有人将另一个find*方法添加到通用存储库,则会中断。
    2. 另一个想法是添加一个布尔值" virtualPropertiesInitialized"在模型中,只要访问其中一个虚拟属性就查询它,并在需要时初始化虚拟属性。也似乎很奇怪,但是如果有人在通用存储库中添加了另一个" find" -method,就不会破坏。
    3. 我的问题是:

      是否有默认/最佳实践如何做我想做的事?

1 个答案:

答案 0 :(得分:1)

如果从磁盘或数据库中读取最终值的计算量较小,则使用TYPO3 caching framework或您自己的静态类缓存方法存储该值,并将其还原到虚拟属性的getter中。在getter方法public mixed getYourPropery()中执行此操作将为您提供仅在调用时从缓存中获取值的功能。

在第二个电话中,只返回您之前存储的值:

private $myValue = NULL;

public function getMyValue() {
    if($this->myValue != NULL) return $this->myValue;

    $this->myValue = "test";
    return $this->myValue;
}