为了账号安全,请及时绑定邮箱和手机立即绑定

Yii2 ActiveForm 上传不同属性的文件

Yii2 ActiveForm 上传不同属性的文件

PHP
慕容森 2021-11-05 16:23:41
我有一个 Yii2 ActiveForm,它有两个接受文件输入的表单域。<?= $form->field($model, 'mainImage')->fileInput() ?><?= $form->field($model, 'productImage[]')->fileInput() ?>在控制器中,我有:    public function actionCreate(){    $model = new Product();    $model->supplier_id = Yii::$app->user->identity->id;    $imageArray = ['mainImage','productImage'];    $mainImageIndex = 1;    if ($model->load(Yii::$app->request->post())) {        $model->mainImage = UploadedFile::getInstance($model, 'mainImage');        $model->images = $model->singleImageUpload();        //UploadedFile::reset();        // var_dump($model->mainImage);        // exit();        $model->productImage = UploadedFile::getInstances($model, 'productImage');        $images = $model->multipleImageUpload();        $imageCount = count($images);        if ($model->validate() && $model->save(false)) {             for ($i=0; $i < $imageCount; $i++) {                 $imageModel = new ProductImage();                $imageModel->product_id = $model->id;                $imageModel->image = $images[$i];                $imageModel->save();            }            return $this->redirect(['view', 'id' => $model->id]);        }    }    return $this->render('create', [        'model' => $model,    ]);}在 Model 类中,我有这些验证规则:[['mainImage','productImage'], 'safe'],[['mainImage','productImage'], 'file','skipOnEmpty' => true, 'extensions' => 'jpeg, jpg, png','checkExtensionByMimeType'=>false, 'maxFiles'=>10],每次我提交表单时,我都会收到一个mainImage字段错误,说明Please upload a file. 没有错误productImage 可能有什么解决方法?编辑图像mainImage并productImage成功上传,但验证错误仍然存在mainImage
查看完整描述

2 回答

?
慕盖茨4494581

TA贡献1850条经验 获得超11个赞

问题是模型类中的验证。我已经将它们标记为safe

[['mainImage','productImage'], 'safe'],

我注释掉了这个验证并且它起作用了


查看完整回答
反对 回复 2021-11-05
?
慕田峪7331174

TA贡献1828条经验 获得超13个赞

如果要上传多个文件,则需要更改视图


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

<?= $form->field($model, 'productImage[]')->fileInput(['multiple' => true, 'accept' => 'image/*']) ?>

并且您的ruleinmodel说您一直在尝试上传多个图像的属性productImage[]和mainImage. 但是视图表示该属性mainImage用于单个文件,因此更改规则。


[['mainImage'], 'file', 'skipOnEmpty' => true, 'extensions' => 'jpeg, jpg, png'],

[['productImage'], 'file','skipOnEmpty' => true, 'extensions' => 'jpeg, jpg, png','checkExtensionByMimeType'=>false, 'maxFiles'=>10],

在控制器中,


$model->productImage = UploadedFile::getInstances($model, 'productImage');

$model->mainImage = UploadedFile::getInstance($model, 'mainImage');


if ($model->multipleImageUpload()) {

   // file is uploaded successfully

   return;

}

在你的模型中,


public function multipleImageUpload()

    {

        if ($this->validate()) { 

            foreach ($this->imageFiles as $file) {

                $file->saveAs('uploads/' . $file->baseName . '.' . $file->extension);

            }

            return true;

        } else {

            return false;

        }

    }

如需更多参考,请访问此链接:https : //www.yiiframework.com/doc/guide/2.0/en/input-file-upload


查看完整回答
反对 回复 2021-11-05
  • 2 回答
  • 0 关注
  • 172 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信