【问题标题】:Data Mappers, Models and Images数据映射器、模型和图像
【发布时间】:2010-04-05 11:25:13
【问题描述】:

我已经看到并阅读了大量的博客文章和论坛主题,讨论并提供了 PHP 中的数据映射器/模型实现的示例,但我还没有看到任何涉及保存文件/图像的内容。

我目前正在开发一个基于 Zend 框架的项目,我正在模型中进行一些图像处理(正在传递一个文件路径),然后我将它留给映射器以将该文件保存到适当的位置 - 这是常见的做法吗?

但是,您如何处理从传入的图像创建 3 个不同尺寸的图像?目前我有一个setImage($path_to_tmp_name),它检查图像类型,调整大小,然后保存回原始文件名。调用getImagePath() 然后返回数据映射器可以使用的当前文件路径,然后在将其保存到适当的位置后通过调用setImagePath($path) 进行更改,例如“/content/my_images”。这听起来实用吗?

另外,您将如何处理获取该图像的 URL?你认为这是模型应该提供的东西吗?在我看来,该模型应该担心图像的存储位置或最终如何通过浏览器访问它们,因此我倾向于将其放在 ini 文件中,并通过 URL 前缀将 URL 前缀传递给视图控制器。这听起来合理吗?

我正在使用 GD 进行图像处理 - 这与此无关。

更新:我一直想知道是否应该在模型中调整图像大小。该模型可能要求它提供一个“主”图像和一个“拇指”图像,两者都是特定尺寸的。我考虑过在模型中创建一个getImageSpecs() 函数,该函数将返回定义所需大小的内容,然后一个单独的图像处理类可以执行调整大小和(可能在控制器中?)并传递最终路径使用 setImagePaths($images) 之类的东西到模型。

任何想法都非常感谢:)

【问题讨论】:

    标签: php image data-modeling datamapper


    【解决方案1】:

    我首先要告诉您,让映射器保存文件的路径是常见的做法,因为这正是服务层(在您的情况下为映射器)应该做的。在您的情况下,最好的办法是为生成的每个文件创建一个路径。我建议这样做:

    $path = '/path/to/root/' . substr(chunk_split(md5(<unique id for file>), 2, '/'), 0, 5);
    

    通过执行上述操作,您的路径将类似于:/path/to/root/ab/23/。由于您需要为每个图像提供不同的尺寸,因此您现在使用 id 的名称后跟尺寸来保存每个图像。例如:

    $fileName = <uniquie file id from above> . '_50_100' . $ext;
    

    您最后需要做的就是将路径保存在数据库中。然后,您的模型可以从服务层检索路径并构建您需要的 URL。

    【讨论】:

    • 非常感谢您的回复。对不起,如果我是无知的,但为什么不直接使用 ID 作为文件名呢? chunk_spit 只是为了帮助文件分类吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 2013-11-07
    • 2010-09-17
    • 2012-08-14
    • 1970-01-01
    • 2022-08-03
    • 2015-11-12
    相关资源
    最近更新 更多