Итак, что может компонент?
1. Загружает изображение в указанную папку.
2. При обновлении изображения удаляет старое. (Например загружаем новый аватар, а старый удаляем)
3. Если нам пытаются подсунуть текстовый файл с расширением графического файла, то такой файл сразу удаляется.
4. Может изменять размер исходного изображения и создавать превью (Помогает в этом ImageHandler)
Как использовать?
1. Для начала в конфиге прописываем:
Код: Выделить всё
'import'=>array(
...
'application.components.ImageLoader.CImageLoader',
),
.....
'components'=>array(
....
'il'=>array(
'class'=>'CImageLoader',
),
),
Код: Выделить всё
public $image; //Атрибут для хранения изображения
...
public function rules()
{
return array(
...
array('avatar, image', 'file', 'types' => 'jpg,jpeg,gif,png', 'allowEmpty' => true, 'safe' => false),
array('avatar, image', 'file', 'maxSize' => 1024 * 200, 'allowEmpty' => true, 'safe' => false, 'tooLarge' => 'Размер файла {file} слишком велик'),
....
);
}
public function beforeSave()
{
$il = new CImageLoader();
$il->model = self::findByPk($this->id);
$il->attribute_temp = 'image';
$il->attribute_bd = 'avatar';
$il->path = '/upload/users/';
$il->thumbs = true;
$this->avatar = $il->Upload()->avatar;
return parent::beforeSave();
}
'enctype'=>'multipart/form-data'
Поле для выбора файла:
Код: Выделить всё
<?php echo $form->fileField($userProfile, 'image'); ?>
Входные параметры
Код: Выделить всё
public $model //Ваша модель
public $attribute_temp //Атрибут для хранения загруженной картинки. В нашем случае "image"
public $attribute_bd; //Атрибут для хранения названия картинки в БД
public $path = '/upload/users/'; //Путь загрузки фото
public $size_origin = array(200, 200); //Размеры основного изображения (если нужно обрезать по размерам)
public $thumbs = false; // Если нужны превью, то заменить на true
public $size_thumbs = array(
array(32, 32),
array(50, 50),
array(100, 100),
); //массив с размерами превью
Прочие пояснения
Для работы резайзов подключите CImageHandler viewtopic.php?f=9&t=882
Структура папок для аватора в моем случае:
/upload/users/
/upload/users/thumbs_32/
/upload/users/thumbs_50/
/upload/users/thumbs_100/
Добавил компонент на Битбакет: https://bitbucket.org/matios/imageloader
Хотелось бы услышать ваше мнение о реализации и полезности данного компонента. Сам то я не так давно начал заниматься Yii да и вообще программированием, поэтому если можно будет как-либо упростить или улучшить код, то рад был бы услышать.