2015-10-19 37 views
1

有沒有一種方法在流中鉤入或擴展存儲庫的更新方法/函數?無論如何,我喜歡創建幾個消息(作爲對象)。我可以擴展或掛接到存儲庫的更新方法嗎?

當前我們使用控制器中的UnitOfWork將對象提供給存儲庫進行更新。但有了這個,消息傳遞只是在那個函數中工作,而不是在我更新那個對象的時候「全局」。

我不喜歡把它放在那個對象的setters中。在我看來,這將是令人討厭的代碼。

任何想法?

回答

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 
    } 
} 

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 \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 { 

} 
+1

超。幫助我很多。週末愉快。謝謝 – Pete

0

我想說你應該看看Flows AOP功能。在關注點分離(SoC)的前提下,存儲庫的任務不是發送通知。

看一看文檔: Aspect Oriented Programming

相關問題