簡體   English   中英

Yii2:提交表單后文件輸入拋出錯誤

[英]Yii2 : File Input throws error after submitting form

當我單擊“注冊”按鈕時,收到以下錯誤:數組到字符串的轉換。 我認為當我調用fileInput()方法時會發生錯誤,但我不知道如何解決。
這是視圖的部分代碼

<?php $form = ActiveForm::begin(); ?>
<?= $form->field($model, 'username')->textInput(['autofocus' => true]) ?>

<?= $form->field($model, 'password')->passwordInput() ?>

<?= $form->field($model, 'email') ?>


<?= $form->field($modelUpload, 'imageFile')->fileInput() ?>

<div class="form-group">
    <?= Html::submitButton('Signup', ['class' => 'btn', 'name' => 'signup-button']) ?>
</div>
<?php ActiveForm::end(); ?>

雖然這是控制器的代碼:

    <?php

class SiteController extends Controller {

    /**
     * Signs user up.
     *
     * @return mixed
     */
    public function actionSignup() {
        $model = new SignupForm();
        $modelUpload = new UploadForm();
        if ($model->load(Yii::$app->request->post()) && $modelUpload->load(Yii::$app->request->post())) {
            $modelUpload->imageFile = UploadedFile::getInstances($modelUpload, 'imageFile');

            if ($user = $model->signup()) {

                if (Yii::$app->getUser()->login($user) && $modelUpload->upload()) {

                    return $this->goHome();
                }
            }
        }

        return $this->render('signup', [
                    'model' => $model,
                    'modelUpload' => $modelUpload,
        ]);
    }

}

這是模型的代碼。 和官方文檔一樣。

<?php

class UploadForm extends Model {

    /**
     * @var UploadedFile
     */
    public $imageFile;

    public function rules() {
        return [
            [['imageFile'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg'],
        ];
    }

    public function upload() {
        if ($this->validate()) {
            $this->imageFile->saveAs('uploads/' . $this->imageFile->baseName . '.' . $this->imageFile->extension);
            return true;
        } else {
            return false;
        }
    }

}
?>

錯誤:

第一張截圖

第二張截圖

第三張截圖

Instant Solution

從下面更改actionSignup()中的行

UploadedFile::getInstances($modelUpload, 'imageFile');

UploadedFile::getInstance($modelUpload, 'imageFile');

Reason

您上傳的只是一個文件,而不是多個文件,因此getInstances()應該是getInstance()

About

getInstance :返回給定模型屬性的上傳文件。 該文件應該使用 [[\\yii\\widgets\\ActiveField::fileInput()]] 上傳

getInstances :返回給定模型屬性的所有上傳文件。

如果你想上傳多個文件 - 在你的模型的FileValidator規則中有'maxFiles' > 1 - 改變你的屬性名稱

<?= $form->field($modelUpload, 'imageFile')->fileInput() ?>

<?= $form->field($modelUpload, 'imageFile[]')->fileInput() ?>

閱讀: https : //www.yiiframework.com/doc/guide/2.0/en/input-file-upload#uploading-multiple-files

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM