Yii Пример модели для сохранения картинки
Primary tabs
пример валидации для формы здесь
<?php
class Image extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
// public $name;
// public $message_id;
//
// public $width; //высота
// public $height; //ширина
// здесь определяем путь до директории
// относительно корня
protected $_dirpath='images/';
public function rules() // формальная валидация
{
return array(
array('name', 'length', 'min'=>10, 'max'=>200),
array('message_id','numerical'),
array('width','numerical'),
array('height','numerical'),
);
}
/**
* возвращаем имя таблицы БД для данной модели
*/
public function tableName()
{
return '{{image}}';
}
// cледующий метод отвечает за сохранение новой картинки в папку
// и добавление метаинформации об этой картинке в базу
// - входным параметром является значение полученное с помощью
// CUploadedFile::getInstance($message, 'image');
/**@param $mid - id сообщения - к которому прикреплена запись
* @param $message - сформированная модель сообщения - в image уже лежит объект
*/
// запоняет поля и сохраняет модель
public function addImage($message, $mid)
{
// сохраняем файл
$name = sha1(uniqid()); // получаем хэш от случайного значения
$ext = CommonLib::getExt($message->image->name);
$name = $name . '.' . $ext; // получаем расширение
$message->image->saveAs('images/' . $name);// сохраняем файл в указанну директорию
// далее работаем с БД
$this->name = $name;
$this->message_id = $mid;
$this->setSize(); // запишем размеры картинки
$this->save();
return $this; // возвращаем модель наружу
}
/**
* заполняет поля ширины и высоты модели
*/
protected function setSize()
{
$path = $_SERVER["DOCUMENT_ROOT"] . "/" . $this->_dirpath . $this->name;
$info = getimagesize($path);
$this->width = $info[0];
$this->height = $info[1];
}
// это полезно для вывода картинки, прикреплённой к сообщению
public function getImageURL()
{
return Yii::app()->request->hostInfo . "/" . $this->dirpath . $this->name;
}
public function relations() // задаём отношения с другими классами (User)
{
return array(
'message' => array(self::BELONGS_TO, 'Message', 'message_id'),
);
}
}
- Log in to post comments
- 3220 reads