Flow中有没有办法挂钩或扩展存储库的更新方法/功能?如果对象无论如何都要改变,我喜欢创建几个消息(作为对象)。
目前,我们在将对象提供给存储库进行更新后,在控制器中使用UnitOfWork。但是,消息传递只是在那个函数中工作,而不是" global"我在哪里更新那个对象。
我不喜欢把它放到那个对象的制定者身上。在我看来,这将是令人讨厌的代码。
有什么想法吗?
答案 0 :(得分:3)
您可以尝试制作YourRepository
,Repository
扩展update()
并实施parent::update()
方法(或致电YourRepository
并实施其余逻辑)。然后,您的所有存储库都应继承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 {
}
:
$encrypt = md5(Auth::user()->id.$selectFile->created_at);
$directories = Storage::files($encrypt);
// dd($directories)
foreach($directories as $values){
$split_folder_file = explode('/', $values);
$splitted_file = end($split_folder_file);
$userdata = 'userdata';
$filenameresult = storage_path().'/'.$userdata.'/'.$encrypt.'/'.$splitted_file;
return response()->download($filenameresult, $splitted_file, ['Content-Type' => 'application/pdf']);
}
答案 1 :(得分:0)
我说你应该看看Flows AOP功能。在关注点分离(SoC)的前提下,发送通知不是存储库的任务。