2016-04-22 97 views
0

一般而言,TYPO3 Flows域驅動的MVC系統中有ActionController,Repositories,Models和Views。在我們的項目中,我們使用一個包含資源的通用File模型。我需要哪個MVC的東西?

現在我們需要一個特殊的「專家」的PHP腳本像一個動作控制器不聽某些URL操作。它應該得到這樣一個對象,做一些內部事情,如記錄東西或在特殊過程之後操作對象並返回信息/返回false。

我需要的是什麼東西MVC?一個界面?經理?你如何打電話給我,我如何在TYPO3 Flow中初始化它?或者是FileController(動作控制器)確切的我必須使用的東西?

這個「專家」不應該聽URL操作,但應該像像

$expertyThing = new ../../Expertything(); 
$expertyThing->doCoolStuff($file); 

動作控制器使用,應該可以使用這樣想的PersistenceManager的(通過注射或無論如何)。

感謝對任何輸入。

回答

2

我想說Service但我不知道如果我理解正確的你。

我猜你有一些FileController,你有createFileAction存在,這就造成從上傳的資源新File模型,做一些驗證,轉換,重命名並保存它使用注射FileRepository。而你想在中間的東西。

所以我創建FileService爲​​- 注入庫和其他服務存在。而在操作或命令控制器我注入這些服務,他們做「專家」的東西(我沒有複製的代碼),這樣的:

// FileController 
public function createFileAction(Resource $resource) { 
    try { 
     $file = $this->fileService->processAndSaveFile($resource); 
    } catch (\Exception $e) { 
     $this->addFlashMessage($e->getMessage(), '', Message::SEVERITY_ERROR); 
     $this->forwardToReferringRequest(); 
    } 
    $this->addFlashMessage('File created'); 
    $this->redirect('fileList'); 
} 

所以對我的FileService做檔案專家的東西 - 它創建新的File模型(可能使用FileFactory),使用ImageService等其他服務進行轉換,注入存儲庫和記錄器(但對於日誌記錄等情況,您可以使用Aspects)。如果出現錯誤,則會引發一些FileException。

當然FileService可能會實現一些FileServiceInterface,並且您可以將此接口注入您的控制器並在Objects.yaml中定義應該使用哪個服務(它使它更加靈活,所以其他人可以實現它並替換您的FileService不觸及它)。

這種「服務」的做法可能有點有點過時,所以也許有人會提出更好的解決方案。如果你想跟着流規則,只需要檢查他們如何處理類似的東西在官方軟件包。

+0

對不起沒有repsonse ...我仍然與這種情況鬥爭。但感謝輸入。到目前爲止,對我來說很有意義。 – Pete

相關問題