MetaoupPakePHP, загрузить изображение в разные папки для каждой модели - PullRequest
0 голосов
/ 10 июня 2011

Я использую meioupload для загрузки изображений в cakePHP, я использую таблицу с именем 'attachment', чтобы сохранить информацию о загруженном изображении, это структура моей таблицы вложений:

CREATE TABLE IF NOT EXISTS `attachments` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `created` datetime NOT NULL,
  `modified` datetime NOT NULL,
  `class` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `foreign_id` bigint(20) unsigned NOT NULL,
  `filename` varchar(255) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `dir` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
  `mimetype` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci DEFAULT NULL,
  `filesize` bigint(20) DEFAULT NULL,
  `height` bigint(20) DEFAULT NULL,
  `width` bigint(20) DEFAULT NULL,
  `description` text NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

И у меня сейчас есть другой2 таблицы, связанные с этим через поле класса (имя таблицы) и foreign_id.Теперь мой вопрос: как я могу сохранить загруженное изображение в отдельную папку для каждой модели?

Например: я хотел бы сохранить изображение своего сообщения в папку «post» и сохранить изображение моего профиля в «папка профиля

ОБНОВЛЕНИЕ: в моей модели вложений

public $actsAs = array(
    'MeioUpload' => array(
        'filename' => array(
            'dir' => 'post', #i set the default folder as 'post' at the moment
            'create_directory' => true,
            'allowed_mime' => array(
                'image/jpeg',
                'image/pjpeg',
                'image/png'
            ),
            'allowed_ext' => array(
                '.jpg',
                '.jpeg',
                '.png'
            ),
            'thumbsizes' => array(                  
                'large' => array(
                    'width' => 500,
                    'height' => 500
                ),
                'small' => array(
                    'width' => 100,
                    'height' => 100
                )
            )
        )
    )
);

ОБНОВЛЕНИЕ # 2 : допустим, у меня сейчас 3 таблицы "Вложение "" post "и" профиль ", которое actA meioupload - это" вложение ", каждый раз, когда я загружаю изображение через" post "или" профиль ", я сохраняю информацию об изображении в полях" attachment ", foreign_id и classв «вложении» - это то, которое соединяет «вложение» с «постом» и «профилем».

ОБНОВЛЕНИЕ № 3: я последовал предложению Данхамзза об использовании поведения на лету и нашел это решение, и оно работает.

$this->Attachment->Behaviors->attach(
    'MeioUpload', array(
        'filename' => array(
            'dir' => 'avatars'
        )
    ));

Спасибо

Ответы [ 2 ]

0 голосов
/ 10 июня 2011

Вот пример для массива $ actAs.

    'MeioUpload' => array(
        'filename' => array(
            'dir' => 'files/banners',
            'create_directory' => false,
            'allowed_mime' => array(
                'image/jpeg',
                'image/pjpeg',
                'image/gif',
                'image/png'
            ),
            'allowed_ext' => array(
                '.jpg',
                '.jpeg',
                '.png',
                '.gif'
            ),
        )
    ),

Как видите, есть ключ "dir", который вы можете изменить

0 голосов
/ 10 июня 2011

Ответ находится в вашем MeioUpload, а именно в опции 'dir', вы можете указать {ModelName} или {fieldName}, чтобы изменить место сохранения файла. Вот значение по умолчанию в самом поведении:

dir' => 'uploads{DS}{ModelName}{DS}{fieldName}',

Обновление

Для того, чтобы MeioUpload поддерживал различные настройки для одной и той же модели, вы можете попробовать , прикрепляя поведение на лету , что позволяет изменять настройки по своему усмотрению.

Например, в ваших сообщениях действие

$this->Attachment->Behaviours->attach('MeioUpload', array('dir' => '/uploads/posts/');

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

...