2010-04-05 277 views
1

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

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

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

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

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

更新:我一直在想,如果图像调整大小应该在模型中完成。该模型可能要求它提供了一个“主”图像和一个“拇指”图像,两者都有一定的尺寸。我曾想过在模型中创建一个可以返回定义所需大小的函数的getImageSpecs()函数,然后一个单独的图像操作类可以执行大小调整(也许在控制器中?),并将最终路径传递给模型使用类似setImagePaths($images)

任何想法非常赞赏:)

回答

0

我会第一个告诉你,有一个映射器保存文件路径是常见的做法,因为这是完全是一个服务层(在你的情况映射器)应该做的事情。你的情况最好的办法是为每个生成的文件创建一个路径。我建议做:

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

通过做你的路径上面的会是这样的:/路径/到/根/ AB/23 /。由于每张图片需要不同的尺寸,因此您现在将每张图片保存为ID的名称,后面跟着尺寸。例如:

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

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

+0

非常感谢您的回复。对不起,如果我是无知的,但为什么不使用ID作为文件名? chunk_spit只是为了帮助分类文件? – James 2010-04-05 15:00:14