Commit c8b5de6a authored by Shakarim Sapa's avatar Shakarim Sapa

- Добавлен метод сохраняющий файл в файловой системе и переписывающий значение...

- Добавлен метод сохраняющий файл в файловой системе и переписывающий значение поля содержащего путь к изображению
parent 88c5c7d8
...@@ -12,11 +12,12 @@ use yii\web\UploadedFile; ...@@ -12,11 +12,12 @@ use yii\web\UploadedFile;
* @property string $name * @property string $name
* @property string $description * @property string $description
* @property string $image * @property string $image
* @property UploadedFile $uploadedImage
*/ */
class AnalyticsSchoolCourse extends \common\components\ActiveRecordModel class AnalyticsSchoolCourse extends \common\components\ActiveRecordModel
{ {
public $uploadedImage; public $uploadedImage;
const SAVE_FOLDER = '/uploads/courses'; protected $save_folder = ['uploads', 'courses'];
/** /**
* @inheritdoc * @inheritdoc
...@@ -41,28 +42,75 @@ class AnalyticsSchoolCourse extends \common\components\ActiveRecordModel ...@@ -41,28 +42,75 @@ class AnalyticsSchoolCourse extends \common\components\ActiveRecordModel
return [ return [
[['name'], 'required'], [['name'], 'required'],
[['description', 'image'], 'string'], [['description', 'image'], 'string'],
[['uploadedImage'], 'file', 'extensions' => ['jpg', 'jpeg', 'png']], [['uploadedImage'], 'file', 'extensions' => ['pdf', 'jpeg', 'png']],
[['name'], 'string', 'max' => 255], [['name'], 'string', 'max' => 255],
]; ];
} }
/**
* @param bool $insert
* @return bool
*/
public function beforeSave($insert){ public function beforeSave($insert){
if (!parent::beforeSave($insert)) if (!parent::beforeSave($insert))
return false; return false;
// Перед сохранением
// Присваиваем свойству класс объекта с выгруженным изображением из формы
$this->uploadedImage = UploadedFile::getInstance($this, 'uploadedImage'); $this->uploadedImage = UploadedFile::getInstance($this, 'uploadedImage');
// Если свойство не пустое
if (!is_null($this->uploadedImage)) { if (!is_null($this->uploadedImage)) {
if ($this->validate('uploadedImage')) { // Производим валидацию
$this->addError('uploadedImage', 'Загрузка файлов еще не настроена. Обратитесь к администратору.'); if (!$this->validate())
// Если валидация неуспешная, возвращаем false
return false; return false;
// Сгенерировали путь к папке
$dirname = Yii::$app->security->generateRandomString(5);
// Определили mime тип файла и занесли его в массив
$fileFormat = explode('/', $this->uploadedImage->type);
// Сгенерировали новое имя для файла
$fileName = Yii::$app->security->generateRandomString(5).'.'.$fileFormat[1];
// Определили папку в которую будет загружен файл
$saveDir = $this->getPath().DIRECTORY_SEPARATOR.$dirname;
// Если папка не найдена
if (!is_dir($saveDir))
// Создаем ее (рекурсивно)
mkdir($saveDir, 0777, true);
// Если до этого момента действие не было остановлено - сохраняем файл в файловой системе
if ($this->uploadedImage->saveAs($saveDir.DIRECTORY_SEPARATOR.$fileName)) {
// Переопределяем значение в поле
$this->image = $this->getPath(false, '/').'/'.$dirname.'/'.$fileName;
} }
} }
return true; return true;
} }
public function getPath() /**
{ * @param bool $insert
return Yii::getAlias('@frontend/web').self::SAVE_FOLDER; * @param array $changedAttributes
*/
public function afterSave($insert, $changedAttributes){
parent::afterSave($insert, $changedAttributes);
}
/**
* Возвращает путь к папке для загрузки файлов
*
* Принимает два параметра true/false;
* true - получаем абсолютный путь к директории;
* false - получаем относительный путь к директории;
* @param bool $absolute
*
* Принимает строку.
* Является разделителем в пути;
* @param string $delimiter
*
* @return string
*/
public function getPath($absolute=true, $delimiter=DIRECTORY_SEPARATOR) {
$path = $delimiter.'web'.$delimiter.(implode($delimiter, $this->save_folder));
return ($absolute===true) ? Yii::getAlias('@frontend').$path : $path;
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment