1

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

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

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

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

我正在使用 GD 进行图像处理——这无关紧要。

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

任何想法都非常感谢:)

4

1 回答 1

0

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

$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。

于 2010-04-05T14:30:42.290 回答