Answer the question
In order to leave comments, you need to log in
afterSave carousel in YII2 or how to attach image to entity?
In general, the situation is as follows: you need to upload PDF files to the database (PS: upload not the files themselves to the database, but records with information about their location on the site), so that people can then download / watch them in the browser.
Model attributes:
return [
'id' => 'ID',
'issue_date' => 'Дата выпуска',
'issue_num' => 'Номер газеты',
'year_num' => 'Номер в году',
'path' => 'Ссылка на файл',
'size' => 'Размер файла',
'created_by' => 'Создано',
'updated_by' => 'Обновлено',
'created_at' => 'Дата создания',
'updated_at' => 'Дата обновления',
'view_count' => 'Количество просмотров',
'download_count' => 'Количество скачиваний',
'is_active' => 'Активность',
];
Answer the question
In order to leave comments, you need to log in
"Good" - I thought, and decided to move the temporary file in the afterSave method. But then, after moving, I need to change the address of the file in the database, then afterSave twitches again, and again, and again?!
/**
* @property $id ID
* @property $issue_date Дата выпуска
* @property $issue_num Номер газеты
* @property $year_num Номер в году
* @property $size Размер файла
* @property $created_by Создано
* @property $updated_by Обновлено
* @property $created_at Дата создания
* @property $updated_at Дата обновления
* @property $view_count Количество просмотров
* @property $download_count Количество скачиваний
* @property $is_active Активность
*
* @property $module Модуль к которому относится файл
* @property $filename Название файла (вместе с расширением)
*/
class PdfFile extends \yii\db\ActiveRecord
{
/**
* @var string Путь к папке загрузок, но вообще лучше его вынести в алиас
*/
const PATH = '/userdata/pdfs/'
/**
* Функция получения полного пути к файлу
*
* @return string
*/
public function getFilepath() {
return $this::PATH . $this->module . '/' . $this->id . '/' . $this->filename;
}
/**
* @inheritdoc
*/
public function afterSave( $insert, $changedAttributes ){
// тут перемещаем файл с временной папки в папку $model->getFilepath
}
}
$insert and $changedAttributes are passed to afterSave - you only need to pull at $insert, as far as I understand.
Do a check if ($insert) and update the record, specifying the path to the file, save. After this save, $insert will already be false, because the model will already have an ID.
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question