数据映射器,模型和图像

时间:2010-04-05 11:25:13

标签: php image data-modeling datamapper

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

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

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

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

我正在使用GD进行图像处理 - 而不是那种相关的。

更新:我一直想知道是否应该在模型中完成图像大小调整。该模型可能要求它提供“主”图像和“拇指”图像,两者都具有某些尺寸。我已经考虑过在模型中创建一个getImageSpecs()函数来返回定义所需大小的函数,然后一个单独的图像处理类可以执行调整大小和(可能在控制器中?)并且只是通过最后一个使用类似setImagePaths($images)的方式进入模型的路径。

任何想法都非常感激:)

1 个答案:

答案 0 :(得分: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。