【问题标题】:How to serve a MVC-view with image paths from directory?如何使用目录中的图像路径提供 MVC 视图?
【发布时间】:2009-08-03 09:20:21
【问题描述】:

我对整个 MVC 概念有点陌生,因为我最近才开始使用 CakePHP 框架开发一个网站。因此,我向您询问如何以最佳实践方式实现以下目标。

我希望能够在一个目录中放置许多图片,然后扫描该目录中的所有文件名。这些文件名应该随后被传递给任意视图,然后循环遍历所有文件名,为它们制作img标签。

如果这可以以通用方式完成就好了,这样我就可以将代码重用于相同的任务但使用不同的目录名称。

我已经尝试了以下两种方法。然而,出于某种原因,这些都不是最好的

  1. 使用$useTable=false 创建模型。
  2. 创建一个普通类并将其作为供应商导入。

什么实现我上面描述的最佳方式

【问题讨论】:

    标签: model-view-controller cakephp file-handling


    【解决方案1】:

    我认为您的原始想法更好,使用模型遍历/读取/写入目录。将文件结构视为您的数据源。您可以使用 $this->data 将目录名传递给模型,然后让它使用 File class 检索您需要的内容。这将使其可跨控制器移植(使用loadModel()

    稍后,如果您将图像路径移动到数据库中,您只需重新编写模型即可将其考虑在内。

    【讨论】:

    • 很高兴你喜欢我自己的想法。 :) 但是,我对此有点担心。我会怎样称呼这样的模型,使其可用于多种用途(例如,personal_photos、sponsor_logos 目录),而不破坏模型名称为单数的 CakePHP 约定?这是一个关于易于重构的好点。
    • 我认为您会想要一些通用的东西,例如“图像”。我目前正在开发的 App 中有一个 Image 模型。
    • 应该成功了!如果我没有遇到任何问题,我会尝试一下并将您的答案标记为已接受。谢谢!
    【解决方案2】:

    我之前做过以下事情:创建一个例如 ImageManager 类并将其作为 IImageManager 传递给例如 ImageController 的构造函数,而不是传递存储库。然后 ImageManager 可以完成您提到的所有工作。

    编辑:我是在 .net mvc 中完成的,并且没有使用 CakePHP 的经验,但我想有一个地方可以将 IImageManager 的具体实现注册为 ImageManager,这样框架就会知道将什么传递给控制器​​的构造函数

    【讨论】:

    • 这听起来确实是个好主意。但是,我不确定如何在 CakePHP 中实现这一点,因为我只是一个 cakebaker 新手。如果这在 CakePHP 中是可能的,有人可以给出提示,在这种情况下如何?
    【解决方案3】:

    我会为此创建一个helper

    编辑:对于文件系统的拖网,请使用助手中的 Folder 类。

    【讨论】:

    • 啊哈,这是一个有趣的建议;我一直认为这是视图(和助手)处理的很多逻辑,但情况可能并非如此。我会考虑这种方法,如果没有人反对,可能会实施。
    • 我反对。我不认为视图助手是在文件系统中搜索逻辑的正确位置
    • 要添加到我的评论中,帮助者可以例如。可能会创建 img 标签但无法获取文件名列表
    • 好的,这证实了我的想法——谢谢!但问题仍然存在,扫描文件系统并提供文件路径的逻辑应该发生在哪里?又应该如何传送到视图中?
    • 希望我能提供更多帮助。仍然认为我的回答为这种逻辑提供了一个不错的地方。然后文件名列表可以作为字符串列表或数组传输到视图
    猜你喜欢
    • 1970-01-01
    • 2020-09-13
    • 2012-08-04
    • 2017-11-17
    • 2017-12-08
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    相关资源
    最近更新 更多