Php 我需要什么MVC?

Php 我需要什么MVC?,php,model-view-controller,typo3-flow,Php,Model View Controller,Typo3 Flow,通常,在TYPO3 Flows域驱动的MVC系统中有ActionController、存储库、模型和视图。在我们的项目中,我们使用一个包含Ressource的通用文件模型 现在我们需要一个特殊的“专家”php脚本,比如一个不监听特定url操作的动作控制器。它应该得到这样一个文件对象,做一些内部的事情,比如记录东西,或者在一个特殊的过程后操作对象,并返回一个信息/返回错误 我需要什么mvc?接口?经理?你怎么称呼它,我怎么在TYPO3 Flow中初始化它?或者FileController(动作控制

通常,在TYPO3 Flows域驱动的MVC系统中有ActionController、存储库、模型和视图。在我们的项目中,我们使用一个包含Ressource的通用
文件
模型

现在我们需要一个特殊的“专家”php脚本,比如一个不监听特定url操作的动作控制器。它应该得到这样一个
文件
对象,做一些内部的事情,比如记录东西,或者在一个特殊的过程后操作对象,并返回一个信息/返回错误

我需要什么mvc?接口?经理?你怎么称呼它,我怎么在TYPO3 Flow中初始化它?或者FileController(动作控制器)正是我必须使用的东西

这个“专家”不应该听url操作,但应该像操作控制器一样使用,比如

$expertyThing = new ../../Expertything();
$expertyThing->doCoolStuff($file);
而且应该可以像PersistenceManager那样思考(通过注入或其他方式)


谢谢你的意见。

我想说
服务
,但我不确定我是否理解正确

我猜你有一些
FileController
createFileAction
,它从上传的资源中创建新的
文件
模型,进行一些验证、转换、重命名,并使用注入的
文件存储库
保存它。。你想要中间的东西

因此,我为
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)进行转换,注入了存储库和记录器(但您可以用于日志记录等情况)。。如果出现问题,它会抛出一些FileException

当然,FileService可能会实现一些FileService接口,您可以将此接口注入控制器,并在
Objects.yaml
中定义应该使用哪个服务(它使它更灵活,因此其他人可以实现它并在不接触它的情况下替换您的FileService)


这种“服务”方式可能有点过时,所以也许有人会建议更好的解决方案。。如果你想遵循流程规则,只需检查他们如何处理官方软件包中的类似内容。

我会说
服务
,但我不确定我是否正确理解你的意思

我猜你有一些
FileController
createFileAction
,它从上传的资源中创建新的
文件
模型,进行一些验证、转换、重命名,并使用注入的
文件存储库
保存它。。你想要中间的东西

因此,我为
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)进行转换,注入了存储库和记录器(但您可以用于日志记录等情况)。。如果出现问题,它会抛出一些FileException

当然,FileService可能会实现一些FileService接口,您可以将此接口注入控制器,并在
Objects.yaml
中定义应该使用哪个服务(它使它更灵活,因此其他人可以实现它并在不接触它的情况下替换您的FileService)


这种“服务”方式可能有点过时,所以也许有人会建议更好的解决方案。。如果您想遵循流程规则,只需检查他们如何处理官方软件包中的此类内容。

抱歉,没有人重复。。。我仍在与那种情况作斗争。但是谢谢你的投入。到目前为止,这对我来说很有意义。对不起,没有人再告诉我。。。我仍在与那种情况作斗争。但是谢谢你的投入。到目前为止对我来说很有意义。