1

Flow 中有没有办法挂钩或扩展存储库的更新方法/功能?如果对象发生任何变化,我喜欢创建多个消息(作为对象)。

目前我们在将对象提供给存储库进行更新后,在控制器中使用 UnitOfWork。但是,消息传递只是在该功能中起作用,而不是在我更新该对象的地方“全局”。

我不喜欢将其放入该对象的设置器中的想法。在我看来,那将是令人讨厌的代码。

有任何想法吗?

4

2 回答 2

3

您可以尝试制作YourRepository将扩展Repository和实现您的update()方法(或调用parent::update()并实现其余逻辑)的方法。然后,您的所有存储库都应该继承YourRepositoryclass 而不是Repository.

创建YourRepository

use TYPO3\Flow\Annotations as Flow;
use TYPO3\Flow\Persistence\Repository;
/**
 * @Flow\Scope("singleton")
 */
class YourRepository extends Repository {
    public function update($object) {
        parent::update($object);
        // your logic
    }
}

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

public function update($object) {
    if (!is_object($object) || !($object instanceof $this->entityClassName)) {
        $type = (is_object($object) ? get_class($object) : gettype($object));
        throw new \TYPO3\Flow\Persistence\Exception\IllegalObjectTypeException('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 TYPO3\Flow\Annotations as Flow;
/**
 * @Flow\Scope("singleton")
 */
class ModelRepository extends YourRepository {

}
于 2015-10-19T14:47:37.483 回答
0

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

查看文档: Aspect Oriented Programming

于 2015-11-12T10:32:04.830 回答