【问题标题】:Yii2 : File Input throws error after submitting formYii2:提交表单后文件输入抛出错误
【发布时间】:2021-07-23 01:40:13
【问题描述】:

当我单击注册按钮时,我收到以下错误:数组到字符串的转换。 我认为当我调用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;
        }
    }

}
?>

错误:

【问题讨论】:

  • 请添加具体错误。
  • 您应该正确添加堆栈跟踪 不需要指定行的源代码 应该添加完整的堆栈跟踪,请参阅HERE
  • 这很奇怪,当您从表单中删除 fileInput 时它会起作用吗?您在 Yii2 上是什么版本?
  • 第一次提交表单或加载表单时会出现此错误吗?
  • 提交后发生

标签: php yii2 active-form


【解决方案1】:

Instant Solution

从下方更改actionSignup() 内的行

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

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

Reason

你上传的只是一个文件而不是多个文件,所以getInstances()应该是getInstance()

About

getInstance :返回给定模型的上传文件 属性。该文件应使用上传 [[\yii\widgets\ActiveField::fileInput()]]

getInstances: 返回给定模型的所有上传文件 属性。

【讨论】:

  • 我也爱你@Yosirion ?
【解决方案2】:

如果您想上传 多个 文件 - 在模型的 FileValidator 规则中包含'maxFiles' &gt; 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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 2018-07-27
    • 1970-01-01
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多