Здравствуйте.
--
Воспользовался вот этим плагином -
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-файла в БД ?
Может кто делал, сталкивался с этим? Подскажите, я пока не вижу решений. Что я упустил?