Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用Yii framework 2.0上载多个文件_Php_File Upload_Yii2 - Fatal编程技术网

Php 如何使用Yii framework 2.0上载多个文件

Php 如何使用Yii framework 2.0上载多个文件,php,file-upload,yii2,Php,File Upload,Yii2,使用Yii framework 2.0时,我希望能够上载多个文件。在Yii 2之后,在小节下上载多个文件我有以下模型 class Newsletter extends \yii\db\ActiveRecord { public $attachment_file; public function rules() { return [ [['attachment_file'], 'file', 'maxFiles' =>

使用Yii framework 2.0时,我希望能够上载多个文件。在Yii 2之后,在
小节下上载多个文件
我有以下模型

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;
        }
    }
}
使用上面的所有代码,我希望可以使用一个输入文件元素选择多个文件。但这和我所期望的不一样。当我用一个相同的输入文件元素选择多个文件并点击Submit时,我只看到最后选择的文件。所以我开始怀疑我在做什么。我做错什么了吗?或者我是否需要多次添加输入文件元素,一个输入文件元素对应一个上载文件?

请参阅我尝试的内容: 视图代码

    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,
        ]);
    }
多平台模型


这个代码对我有用。希望这也适用于您。

我已经尝试了您的代码。首先,我注意到,当我点击ChooseFiles按钮并多次选择一个文件时,我只看到最后选择的文件。其次,我在控制器的foreach循环中回显$file变量,当我点击Upload按钮时,我只看到最后一个选定文件的一个yii\web\UploadedFile对象。请告诉我什么时候上传多个文件。或者我需要多次添加输入文件吗?我在项目中使用的代码已完成。请尝试调试表单post数据。
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() ?>
    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,
        ]);
    }
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],
        ];
    }
}