получение файла ошибки не может быть пустым в yii2

хотя загрузка файла в yii2, но все еще получение проверки, что пик профиля не может быть пустым. мой код следующий из правила. пожалуйста, помогите мне, как преодолеть эту проблему.

public function rules() {
    return [
        [['profile_pic'], 'file'],
        [ ['profile_pic'], 'required', 'on' => 'update_pic']];
}

от контроллера

$model = new PostForm(['scenario' => 'update_pic']);
if ($model->load(Yii::$app->getRequest()->getBodyParams(), '') && $model->validate()) {
    return ['status' => 1, 'message' => Yii::$app->params['messages']['post_success']];
} else {
    $model->validate();
    return $model;
}

1 ответ

  1. Так же, как @Bizley и @sm1979 прокомментировали, вы не обрабатываете загрузку файла, как это должно быть сделано.

    Фактический файл получен не так, как другие Post params, поэтому вам нужно использоватьUploadedFile::getInstance, чтобы получить экземпляр файла и назначить его profile_picатрибуту в вашей модели.

    в контроллере:

    $model = new PostForm(['scenario' => 'update_pic']);
    // We load the post params from the current request
    if($model->load(Yii::$app->request->post())) {
        // We assign the file instance to profile_pic in your model.
        // We need to do this because the uploaded file is not a part of the
        // post params.
        $model->profile_pic = UploadedFile::getInstance($model, 'profile_pic')
        // We call a new upload method from your model. This method calls the
        // model's validate method and saves the uploaded file.
        // This is important because otherwise the uploaded file will be lost
        // as it is a temporary file and will be deleted later on.
        if($model->upload()) {
            return ['status' => 1, 'message' => Yii::$app->params['messages']['post_success']];
        }
    }
    return $model;
    

    в вашей модели:

    public function upload() {
        // We validate the model before doing anything else
        if($this->validate()) {
            // The model was validated so we can now save the uploaded file.
            // Note how we can get the baseName and extension from the 
            // uploaded file, so we can keep the same name and extension.
            $this->profile_pic->saveAs('uploads/' . $this->profile_pic->baseName . '.' . $this->profile_pic->extension);
            return true;
        }
        return false;
    }
    

    Наконец, просто рекомендация: прочитайте окончательное руководство по Yii 2.0 . Чтение этого и документации по API Yii2-лучший способ узнать Yii2 самостоятельно.