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

时间:2015-10-19 13:26:17

标签: flow-framework

Flow中有没有办法挂钩或扩展存储库的更新方法/功能?如果对象无论如何都要改变,我喜欢创建几个消息(作为对象)。

目前,我们在将对象提供给存储库进行更新后,在控制器中使用UnitOfWork。但是,消息传递只是在那个函数中工作,而不是" global"我在哪里更新那个对象。

我不喜欢把它放到那个对象的制定者身上。在我看来,这将是令人讨厌的代码。

有什么想法吗?

2 个答案:

答案 0 :(得分:3)

您可以尝试制作YourRepositoryRepository扩展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)的前提下,发送通知不是存储库的任务。

查看文档: Aspect Oriented Programming