Я видел и читал множество сообщений в блогах и темах на форумах, в которых обсуждались и приводились примеры реализаций Data Mapper/Model в PHP, но я не видел ни одного, который также имел бы дело с сохранением файлов/изображений.
В настоящее время я работаю над проектом на основе Zend Framework, и я выполняю некоторые манипуляции с изображениями в модели (которой передается путь к файлу), а затем я оставляю это картографу, чтобы сохранить этот файл в соответствующем месте. - это обычная практика?
Но тогда как вы справляетесь с созданием, скажем, 3-х изображений разного размера из одного переданного? На данный момент у меня есть setImage($path_to_tmp_name)
, который проверяет тип изображения, изменяет его размер и затем сохраняет исходное имя файла. Вызов getImagePath()
затем возвращает текущий путь к файлу, который может использовать преобразователь данных, а затем изменяется с помощью вызова setImagePath($path)
после того, как он сохранил его в соответствующем месте, скажем, «/content/my_images». Вам это кажется практичным?
Кроме того, как бы вы справились с получением URL-адреса этого изображения? Считаете ли вы, что модель должна обеспечивать это? Мне кажется, что эта модель должна беспокоиться о том, где хранятся изображения или, в конечном счете, о том, как они доступны через браузер, и поэтому я склонен поместить это в файл ini и просто передать префикс URL в представление через контроллер. Это звучит разумно?
Я использую GD для обработки изображений - не то, чтобы это имело какое-либо значение.
ОБНОВЛЕНИЕ: мне интересно, нужно ли вообще изменять размер изображения в модели. Модель может потребовать, чтобы она предоставила «основное» изображение и изображение «большого пальца» определенных размеров. Я думал о создании функции getImageSpecs()
в модели, которая возвращала бы что-то, что определяет требуемые размеры, тогда отдельный класс обработки изображений мог бы выполнять изменение размера и (возможно, в контроллере?) И просто передавать окончательные пути в модель, использующая что-то вроде setImagePaths($images)
.
Любые мысли очень ценятся :)