@Leopandro
Разработчик CRM/ERP систем

Почему пишет cannot be blank(при загрузке файла)?

Вот такая функция в контроллере отвечает за создание записи
public function actionCreate()
    {
        $model = new Book();
        $model->scenario = 'create';
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $model->preview = UploadedFile::getInstance($model, 'preview');
            $model->save();
            $model->preview->saveAs('uploads/' . $model->preview->baseName . '.' . $model->preview->extension);
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }


рулезы в форме:
public function rules()
    {
        return [
            [['name', 'preview', 'date', 'author_id'], 'required', 'on' => 'update'],
            [['name', 'preview', 'date',  'author_id'], 'required', 'on' => 'create'],
            [['date_create', 'date_update', 'author_id'], 'integer'],
            [['preview'], 'file', 'skipOnEmpty' => 'false', 'extensions' => 'png, jpg, jpeg'],
            [['date'], 'safe'],
            [['name'], 'string', 'max' => 255]
        ];
    }


Но стоит убрать сценарий, все работает нормально:
public function actionCreate()
    {
        $model = new Book();
        //$model->scenario = 'create';
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $model->preview = UploadedFile::getInstance($model, 'preview');
            $model->preview->saveAs('uploads/' . $model->preview->baseName . '.' . $model->preview->extension);
            if ($model->save())
            {
                return $this->redirect(['view', 'id' => $model->id]);
            }
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }
  • Вопрос задан
  • 807 просмотров
Пригласить эксперта
Ответы на вопрос 1
kawabanga
@kawabanga
1) Потому что у вас поле preview - обязательное
2) возможно, у вас не указано в форме - enctype="multipart/form-data" , проверьте приходящие данные
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы