Мы сделали это в нашей CMS (построенной на CakePHP 1.2; извините, если есть какие-то существенные несоответствия, о которых я не знаю), используя поведение. Это делает логику контроллера очень простой (на самом деле мы используем запеченный контроллер без каких-либо модификаций).
К сожалению, TIFF не поддерживается в GD (библиотека обработки изображений по умолчанию в PHP). Вам нужно будет использовать ImageMagick или эквивалентный инструмент, чтобы сделать фактическое преобразование, но логика его реализации в вашем проекте CakePHP не будет отличаться от того, что я здесь описываю.
Поведение (в нашем случае) использовалось для создания изображений в виде эскизов, а также разрешения страницы и для преобразования формата загруженного файла в JPEG.
В своем методе beforeSave()
он проверял, что данные были указаны (и что не было ошибки), а затем извлекал значение tmp_name
из отправленных данных (и удалял отправленный объект данных).
В своем методе afterSave()
он фактически сам выполнял задачу преобразования изображения (помещая сгенерированные изображения в ожидаемое место на диске), а затем обновлял все внешние ключи расширенных моделей с помощью идентификатора загруженного изображения. Мы делаем это в операции afterSave()
, поэтому у нас есть идентификатор базы данных, который можно использовать для именования файлов на диске.
В его методе afterDelete()
мы разъединяем файлы на диске.
Использовать поведение в модели так же просто, как сообщить модели (где ContentImage
— имя поведения):
var $actsAs = array('ContentImage');
Хотя мы также используем модель для определения выходного каталога, поскольку у нас было несколько моделей, которые реализовывали поведение, и это казалось правильным, например. в модели:
function getThumbnailDir() {
return WWW_ROOT.'img'.DS.'upload'.DS.'thumb';
}
и в самом поведении выходной путь становится:
$Model->getThumbnailDir().DS.$Model->id.'.jpg'
person
Kit Grose
schedule
23.07.2012