我可以扩展或连接到存储库的更新方法吗?
Can I extend or hook in to update method of a repository?
Flow 中有没有一种方法可以连接或扩展存储库的更新 method/function?如果对象发生变化,我喜欢创建多个消息(作为对象)。
目前我们在将对象交给存储库进行更新后,在控制器中使用UnitOfWork。但是消息传递只在该函数中起作用,而不是 "global" 我更新该对象的地方。
我不喜欢将它放入该对象的设置器中的想法。在我看来,那将是令人讨厌的代码。
有什么想法吗?
您可以尝试创建 YourRepository
,它将扩展 Repository
并实现您的 update()
方法(或调用 parent::update()
并实现您的其余逻辑)。然后,您所有的存储库都应该继承 YourRepository
class 而不是 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
}
}
或从 Repository
class 复制粘贴 update()
方法体并添加您的逻辑:
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 {
}
我想你应该看看 Flows AOP 特性。在关注点分离(SoC)的前提下,发送通知不是存储库的任务。
Flow 中有没有一种方法可以连接或扩展存储库的更新 method/function?如果对象发生变化,我喜欢创建多个消息(作为对象)。
目前我们在将对象交给存储库进行更新后,在控制器中使用UnitOfWork。但是消息传递只在该函数中起作用,而不是 "global" 我更新该对象的地方。
我不喜欢将它放入该对象的设置器中的想法。在我看来,那将是令人讨厌的代码。
有什么想法吗?
您可以尝试创建 YourRepository
,它将扩展 Repository
并实现您的 update()
方法(或调用 parent::update()
并实现您的其余逻辑)。然后,您所有的存储库都应该继承 YourRepository
class 而不是 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
}
}
或从 Repository
class 复制粘贴 update()
方法体并添加您的逻辑:
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 {
}
我想你应该看看 Flows AOP 特性。在关注点分离(SoC)的前提下,发送通知不是存储库的任务。