Задать вопрос
Isolution666
@Isolution666
Full-Stack Developer

Yii2, как сделать запись в JSON-формате в БД?

Здравствуйте.
--
Воспользовался вот этим плагином - demos.krajee.com/widget-details/fileinput

Вот экшен записи в контроллере:
...
    public function actionCreate()
    {
        $model = new Catalog();
        $model->link = 'obj'.Scripts::getNameFile(); 
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            $model->fullimg = UploadedFile::getInstances($model, 'fullimg');
            $model->upload();
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', ['model' => $model,]);
        }
    }
...


Вот функция в модели, которая успешно загружает картинки в нужное место:
...
    public function upload()
    {
        $dir = 'file/' .$this->id. '/';
        UploadFile::createFolder($dir);
        if ($this->save()) { // validate
            $index = 1;
            foreach ($this->fullimg as $file) {
                $file->saveAs($dir . self::nameFile().preg_replace('/\s+/', '', $file->baseName) .$index++. '.' . $file->extension);
            }
            return true;
        } else {
            return false;
        }
    }
...


При записи выдаёт ошибку, что у поля `fullimg` нет значения по умолчанию, я добавил, не помогло.

Правило следующее:
...
[['fullimg'], 'file', 'skipOnEmpty' => true, 'extensions' => 'png, jpg, jpeg, gif', 'maxFiles' => 1000],
...

даже если отключаю валидацию, не помогает, пишет что не может проверить данные. По этой причине я попробовал `$this->save()` вместо `$this->validate()` - разницы никакой не увидел, или уже просто не заметил, пока возился.

Поле принимает массив а не строку:
<?=$form->field($model, 'fullimg[]')->widget(FileInput::classname(), [
...
]);?>

Естественно что в БД записывается `Array` потому что где-то надо получить данные, и форматировать в json-формат.
Кому интересно, делается это так:
public function actionView($id)
{
    \Yii::$app->response->format = \yii\web\Response::FORMAT_JSON; // формируем заголовок JSON
    $user = \app\models\User::find($id);  // инициализируем данные
    return $user; // выводим в JSON формате
}

Уже испытано, проверенно, работает.
Есть мысль записать через специальную функцию:
...
public function beforeSave($insert) {
        ... // здесь сделать запись в БД 
        return parent::beforeSave($insert);
}
...


Собственно вопрос, как по дефолту записать данные, если `fullimg` пустое?
- Правило с `default` не помогло.

Как перехватить данные, и записать в виде json-файла в БД ?

Может кто делал, сталкивался с этим? Подскажите, я пока не вижу решений. Что я упустил?
  • Вопрос задан
  • 1119 просмотров
Подписаться 1 Простой 10 комментариев
Пригласить эксперта
Ваш ответ на вопрос

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

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