Commit c8b5de6a authored by Shakarim Sapa's avatar Shakarim Sapa

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

- Добавлен метод сохраняющий файл в файловой системе и переписывающий значение поля содержащего путь к изображению
parent 88c5c7d8
......@@ -12,11 +12,12 @@ use yii\web\UploadedFile;
* @property string $name
* @property string $description
* @property string $image
* @property UploadedFile $uploadedImage
*/
class AnalyticsSchoolCourse extends \common\components\ActiveRecordModel
{
public $uploadedImage;
const SAVE_FOLDER = '/uploads/courses';
protected $save_folder = ['uploads', 'courses'];
/**
* @inheritdoc
......@@ -41,28 +42,75 @@ class AnalyticsSchoolCourse extends \common\components\ActiveRecordModel
return [
[['name'], 'required'],
[['description', 'image'], 'string'],
[['uploadedImage'], 'file', 'extensions' => ['jpg', 'jpeg', 'png']],
[['uploadedImage'], 'file', 'extensions' => ['pdf', 'jpeg', 'png']],
[['name'], 'string', 'max' => 255],
];
}
/**
* @param bool $insert
* @return bool
*/
public function beforeSave($insert){
if (!parent::beforeSave($insert))
return false;
// Перед сохранением
// Присваиваем свойству класс объекта с выгруженным изображением из формы
$this->uploadedImage = UploadedFile::getInstance($this, 'uploadedImage');
// Если свойство не пустое
if (!is_null($this->uploadedImage)) {
if ($this->validate('uploadedImage')) {
$this->addError('uploadedImage', 'Загрузка файлов еще не настроена. Обратитесь к администратору.');
// Производим валидацию
if (!$this->validate())
// Если валидация неуспешная, возвращаем 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;
}
public function getPath()
{
return Yii::getAlias('@frontend/web').self::SAVE_FOLDER;
/**
* @param bool $insert
* @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