Картографы данных, модели и изображения

Я видел и читал множество сообщений в блогах и темах на форумах, в которых обсуждались и приводились примеры реализаций 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).

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


person James    schedule 05.04.2010    source источник


Ответы (1)


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

$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-адреса.

person MANCHUCK    schedule 05.04.2010
comment
Большое спасибо за ответ. Извините, если я невежественен, но почему бы просто не использовать идентификатор в качестве имени файла? Chunk_spit просто помогает классифицировать файлы? - person James; 05.04.2010