php - Yii framework 2.0如何上传多个文件

标签 php file-upload yii2

使用 Yii 框架 2.0 我希望能够上传多个文件。关注 Yii 2 documentation ,在 Upload Multiple Files 小节下,我有以下模型。

class Newsletter extends \yii\db\ActiveRecord {
    public $attachment_file;

    public function rules()
    {
         return [
              [['attachment_file'], 'file', 'maxFiles' => 5],
         ];
    }

    public function upload() {

        if ($this->validate()) { 
            foreach ($this->attachment_file as $file) {
                echo '<pre>'; print_r($file); echo '</pre>';
            }
            return true;
        } else {
            return false;
        }
    }
}

以下是我的看法。

<?php use yii\widgets\ActiveForm; ?>

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

<?= $form->field($model, 'attachment_file[]')->fileInput(['multiple' => true,]) ?>

<button>Submit</button>

<?php ActiveForm::end() ?>

在我的 Controller 中,我有以下代码片段。

if (Yii::$app->request->isPost) {
        $model->attachment_file = UploadedFile::getInstances($model, 'attachment_file');
        if ($model->upload()) {
            die();
            // file is uploaded successfully
            return;
        }
}

通过上面的所有代码,我希望我可以用一个输入文件元素选择多个文件。但这并不像我期望的那样。当我选择具有相同输入文件元素的多个文件并点击提交时,我只看到了最后选择的文件。所以我开始怀疑我在做什么。我做错了什么吗?还是我需要多次添加输入文件元素,一个上传文件一个输入文件元素?

最佳答案

看看我尝试了什么: 查看代码

<?php $form = ActiveForm::begin(['options' => ['enctype' => 'multipart/form-data']]) ?>

    <?= $form->field($uploadForm, 'files[]')->fileInput(['multiple' => true]) ?>

    <button class="btn btn-primary">Upload</button>
    <?php ActiveForm::end() ?>

在 Controller 中

    use yii\web\UploadedFile;
    use app\models\MultipleUploadForm;
    use app\models\ProductImage;
    .......
    function actionUploadImage() {
        $form = new MultipleUploadForm();

        if (Yii::$app->request->isPost) {
            $form->files = UploadedFile::getInstances($form, 'files');

            if ($form->files && $form->validate()) {
                foreach ($form->files as $file) {
                    $image = new ProductImage();
                    if ($image->save()) {
                        $file->saveAs($image->getPath());
                    }
                }

            }
        }

        return $this->render('uploadImage', [
            'uploadForm' => $form,
        ]);
    }

MultipleUploadForm 模型

use yii\base\Model;
use yii\web\UploadedFile;

class MultipleUploadForm extends Model
{
    /**
     * @var UploadedFile[] files uploaded
     */
    public $files;

    /**
     * @return array the validation rules.
     */
    public function rules()
    {
        return [
        [['files'], 'file', 'extensions' => 'jpg', 'mimeTypes' => 'image/jpeg', 'maxFiles' => 10, 'skipOnEmpty' => false],
        ];
    }
}

这段代码对我有用。希望这对你也有用。

关于php - Yii framework 2.0如何上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32217193/

相关文章:

PHP Docker 容器无故退出

php - 使用 PHP 数组中的 optgroup 生成下拉菜单

javascript - FileReader 与 window.URL.createObjectURL

php - Yii2。动态添加属性和规则到模型

javascript - 为字母表中的所有字母创建链接

php - 同时插入多行

java - Google Apps 脚本是否可以通过 HTTP POST 接收文件?

c++ - 下载自定义文件格式

php - Yii2 Gii Forbidden code 403 You are not allowed to access this page

php - 通过 ajax 向 Controller 发送请求,从命名空间中删除斜杠?