我在这里需要哪个 MVC 东西


Which MVC thing I need here?

一般来说,在TYPO3 Flow域驱动的MVC系统中有ActionController,Repository,Models和Views。在我们的项目中,我们使用包含 Ressource 的通用File模型。

现在我们需要一个特殊的"专家"php脚本,比如一个不侦听某些URL操作的操作控制器。它应该得到这样一个File对象,做一些内部的事情,比如记录东西,或者在特殊程序后操纵对象,并返回一个信息/返回法鲁。

我需要什么 mvc 东西?接口?经理?您如何称呼它以及如何在 TYPO3 Flow 中初始化它?还是文件控制器(动作控制器)正是我必须为此使用的东西?

这个"专家"不应该监听 url 操作,而应该像操作控制器一样使用,比如

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

并且应该可以使用像持久性管理器这样的想法(通过注入或任何方式)。

感谢您对此的任何输入。

我会

Service但我不确定我是否正确理解了你。

我想你有一些FileController,你在那里createFileAction,它从上传的资源创建新的File模型,做一些验证、转换、重命名并使用注入FileRepository保存它。你想要中间的东西。

所以我为该My/FileManager/Domain/Service/FileService.php创建了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为文件做专家的事情 - 它创建新的文件模型(可能使用FileFactory),使用其他服务(如ImageService)进行转换,注入存储库和记录器(但你可以将Aspects用于日志记录等情况)..如果出现问题,它会抛出一些FileException。

当然,FileService 可以实现一些 FileServiceInterface,您可以将此接口注入您的控制器并定义应该使用Objects.yaml服务(它使它更加灵活,因此其他人可以实现它并替换您的 FileService 而不接触它)。

这种"服务"方法可能有点过时了,所以也许有人会提出更好的解决方案。如果你想遵循 Flow 规则,只需检查他们如何处理官方包中的类似内容。