Задать вопрос
@lilwings

Как получить доступ к переменной в модели в yii2?

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;


Работает все, кроме сохранения пути. Или как можно сделать правильно? Только можно с примером, я читал про вторую модель для сохранения файла, но не разобрался((
  • Вопрос задан
  • 242 просмотра
Подписаться 1 Простой 7 комментариев
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы