Data Mappers, Модели и Изображения - PullRequest
1 голос
/ 05 апреля 2010

Я видел и читал множество постов в блогах и на форумах, в которых рассказывалось и приводилось примеры реализаций Data Mapper / Model в PHP, но я не видел ни одного, который бы также касался сохранения файлов / изображений.

В настоящее время я работаю над проектом на основе Zend Framework и выполняю некоторые манипуляции с изображениями в модели (которым передается путь к файлу), а затем я оставляю это мапперу для сохранения этого файла в подходящее место - это обычная практика?

Но тогда, как вы справляетесь с созданием, скажем, трех изображений разных размеров из переданного? На данный момент у меня есть setImage($path_to_tmp_name), который проверяет тип изображения, изменяет размеры и затем сохраняет исходное имя файла. Вызов getImagePath() затем возвращает текущий путь к файлу, который может использовать преобразователь данных, а затем переключается с помощью вызова на setImagePath($path), после того как он сохранен в соответствующем месте, например, "/ content / my_images". Вам это кажется практичным?

Кроме того, как бы вы справились с получением URL для этого изображения? Считаете ли вы это тем, что должна обеспечивать модель? Мне кажется, что эта модель должна беспокоиться о том, где хранятся изображения или, в конечном счете, о том, как к ним осуществляется доступ через браузер, и поэтому я склонен поместить это в INI-файл и просто передать префикс URL-адреса представлению через контроллер. Это звучит разумно?

Я использую GD для манипулирования изображениями - не то чтобы это имело какое-либо значение.

ОБНОВЛЕНИЕ: Мне было интересно, нужно ли вообще изменять размер изображения в модели. Модель может потребовать, чтобы она предоставляла «основное» изображение и изображение «большого пальца», оба определенного размера. Я думал о создании функции getImageSpecs() в модели, которая бы возвращала что-то, определяющее требуемые размеры, затем отдельный класс манипуляции с изображениями мог бы выполнять изменение размера и (возможно, в контроллере?) И просто передавать окончательные пути в к модели, используя что-то вроде setImagePaths($images).

Любые мысли высоко ценится:)

1 Ответ

0 голосов
/ 05 апреля 2010

Сначала я бы сказал, что использование картографом сохранения пути к файлу является обычной практикой, поскольку именно это должен делать сервисный уровень (в вашем случае картограф). В вашем случае лучше всего было бы создать путь для каждого сгенерированного файла. Я бы предложил сделать:

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

При выполнении вышеизложенного ваш путь будет выглядеть примерно так: / path / to / root / ab / 23 /. Поскольку для каждого изображения вам нужны разные размеры, теперь вы сохраняете каждое изображение с именем идентификатора и последующим размером. пример:

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

Все, что вам нужно сделать, это сохранить путь в базе данных. Затем ваша модель может пойти и извлечь путь из сервисного уровня и построить нужные вам URL.

...