Controller:
public function actionAdd()
{
$model = new Info();
if ( $model->load(Yii::$app->request->post()) ) {
$model->img_preview = UploadedFile::getInstance($model, 'img_preview');
$model->img_full = UploadedFile::getInstance($model, 'img_full');
if ( $model->upload() && $model->save(false) ) {
Yii::$app->session->setFlash('message', 'Информация добавлена!');
return $this->refresh();
}
Yii::$app->session->setFlash('message', 'Не правильные данные!');
}
return $this->render('add', compact('model'));
}
Model:
class Info extends ActiveRecord
{
public $img_preview;
public $img_full;
public static function tableName()
{
return '{{info}}';
}
public function rules() {
return [
[['title', 'preview', 'description_seo'], 'string', 'length' => [0, 255]],
[['title', 'preview', 'description_seo'], 'filter', 'filter' => 'strip_tags'],
[['title', 'preview', 'description_seo'], 'trim'],
[['title', 'preview', 'description_seo'], 'required'],
[['img_preview', 'img_full'], 'file', 'skipOnEmpty' => false, 'extensions' => 'jpg, jpeg'],
['description', 'safe'],
];
}
public function upload() {
if ( $this->validate() ) {
// Создание директории
$folderName = $this->generateUniqFileName("web/info");
FileHelper::createDirectory( Yii::getAlias("@frontend/web/img/info/$folderName") );
// Создание файла
$imgPreviewName = $folderName . '/' . $this->generateUniqFileName("web/info/$folderName") . '.' . $this->img_preview->extension;
$this->img_preview->saveAs( Yii::getAlias("@frontend/web/img/info/$imgPreviewName") );
// Создание Файла
$imgFullName = $folderName . '/' . $this->generateUniqFileName("web/info/$folderName") . '.' . $this->img_full->extension;
$this->img_full->saveAs( Yii::getAlias("@frontend/web/img/info/$imgFullName") );
// Перезаписать файлы их директорией
$this->img_preview = $imgPreviewName;
$this->img_full = $imgFullName;
return true;
}
return false;
}
public function generateUniqFileName($path) {
$name = bin2hex(random_bytes(8));
if ( file_exists( Yii::getAlias("@frontend/$path/$name") ) ) return $this->generateUniqFileName();
else return $name;
}
}
Как можно сохранить в бд значения переменных?
public $img_preview;
public $img_full;
Работает все, кроме сохранения пути. Или как можно сделать правильно? Только можно с примером, я читал про вторую модель для сохранения файла, но не разобрался((