一般情况下,TYPO3 Flows域驱动的MVC系统中有ActionController,Repositories,Models和Views。在我们的项目中,我们使用包含Ressource的通用File
模型。
现在我们需要一位特殊的专家" php脚本就像一个没有听某些url动作的动作控制器。它应该得到这样一个File
对象,做一些像记录东西的内部事务或者在特殊程序之后操纵对象并返回信息/返回值。
我需要什么样的东西?一个界面?经理?您如何称呼它以及如何在TYPO3 Flow中初始化它?或者FileController(动作控制器)是否与我必须使用的东西相同?
这个"专家"不应该听网址操作,但应该像
这样的动作控制器一样使用$expertyThing = new ../../Expertything();
$expertyThing->doCoolStuff($file);
并且应该像PersistenceManager一样使用think(通过注入或无论如何)。
感谢您的任何意见。
答案 0 :(得分:2)
我会说Service
,但我不确定我是否理解正确。
我猜你有一些FileController
并且你有createFileAction
,它会从上传的资源中创建新的File
模型,进行一些验证,转换,重命名并使用注入{{ 1}} ..你想要中间的东西。
所以我为FileRepository
创建FileService
- 在那里注入存储库和其他服务。在动作或命令控制器中,我注入了这些服务,并且他们做了#34; expert"东西(而且我不必重复代码),就像那样:
My/FileManager/Domain/Service/FileService.php
所以对我来说,FileService为File做专家 - 它创建了新的File模型(可能使用FileFactory),使用ImageService等其他服务进行转换,注入了存储库和记录器(但是你可以使用Aspects来处理记录)..如果出现问题,它会抛出一些FileException。
当然,FileService可以实现一些FileServiceInterface,你可以将这个接口注入你的控制器并在// 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没有触及它。)
这"服务"方法可能有点过时,所以也许有人会建议更好的解决方案..如果你想遵循Flow规则,只需检查他们如何处理官方包中的东西。