我可以扩展或挂接更新存储库的方法吗?



在Flow中是否有一种方法可以钩入或扩展存储库的更新方法/函数?如果一个对象改变了,我喜欢创建几个消息(作为对象)。

当前,我们在将对象交给存储库进行更新后,在控制器中使用UnitOfWork。但是,消息传递只是在那个函数中工作,而不是在我更新那个对象的地方"全局"。

我不喜欢把它放到那个对象的setter中。在我看来,这将是令人讨厌的代码。

任何想法?

您可以尝试使YourRepository扩展Repository并实现您的update()方法(或调用parent::update()并实现您的其余逻辑)。所有的存储库应该继承YourRepository类而不是Repository

创建YourRepository:

use TYPO3FlowAnnotations as Flow;
use TYPO3FlowPersistenceRepository;
/**
 * @FlowScope("singleton")
 */
class YourRepository extends Repository {
    public function update($object) {
        parent::update($object);
        // your logic
    }
}

或从Repository类复制粘贴update()方法主体并添加您的逻辑:

public function update($object) {
    if (!is_object($object) || !($object instanceof $this->entityClassName)) {
        $type = (is_object($object) ? get_class($object) : gettype($object));
        throw new TYPO3FlowPersistenceExceptionIllegalObjectTypeException('The value given to update() was ' . $type . ' , however the ' . get_class($this) . ' can only store ' . $this->entityClassName . ' instances.', 1249479625);
    }
    $this->persistenceManager->update($object);
}

Model的每个存储库现在应该继承自YourRepository:

use TYPO3FlowAnnotations as Flow;
/**
 * @FlowScope("singleton")
 */
class ModelRepository extends YourRepository {
}

我想说你应该看看flow的AOP特性。在关注点分离(SoC)的前提下,发送通知不是存储库的任务。

看一下文档:面向方面编程

最新更新