【问题标题】:Which MVC thing I need here?我在这里需要哪个 MVC 东西?
【发布时间】:2016-04-22 15:15:08
【问题描述】:

TYPO3 Flows 领域驱动的 MVC 系统中通常有 ActionController、Repositories、Models 和 Views。在我们的项目中,我们使用包含 Ressource 的通用 File 模型。

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

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

这个“专家”不应该监听 url 动作,而应该像动作控制器一样使用

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

并且应该可以使用 PersistenceManager 之类的想法(通过注入或任何方式)。

感谢您对此的任何意见。

【问题讨论】:

    标签: php model-view-controller typo3-flow


    【解决方案1】:

    我会说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 为 File 做专家级工作 - 它创建新的 File 模型(可能使用 FileFactory),使用 ImageService 等其他服务进行转换,注入存储库和记录器(但您可以使用 Aspects 用于记录等情况) .. 如果出现问题,它会抛出一些 FileException。

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

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

    【讨论】:

    • 抱歉没有回复...我仍然在与这种情况作斗争。但感谢您的输入。到目前为止对我来说很有意义。
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多