1

我正在使用yii2 basic并且想制作一个画廊,所以我使用了多文件上传。一切正常,直到我添加了一个文本输入('年份')。

GalleryController.php

    public function actionCreate()
    {
        $model = new MultipleUploadForm();
        $year;

        if (Yii::$app->request->isPost) {
            $model->files = UploadedFile::getInstances($model, 'files');
            if ($model->gaUpload()) {
                return $this->redirect(['index']);
            }
        }

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

多重上传表单:

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

    public function rules()
    {
        return [
            [['files'], 'file', 'skipOnEmpty' => false, 'maxFiles' => 0],
            [['year'], 'string'],
        ];
    }
    public function gaUpload()
    {   
        if ($this->validate()) {
            foreach ($this->files as $file) {
                $model2 = new Gallery();
                $model2->img = $file->baseName . '_' . rand(100,999) . '.' . $file->extension;
                $model2->save_dir = 'uploads/gallery/';
                $model2->year = $this->year;
                $file->saveAs($model2->save_dir . $model2->img);

                $model2->save();

            }

            return true;
        } else {
            return false;
        }

    }
}

画廊:

class Gallery extends \yii\db\ActiveRecord
{
    /**
     * {@inheritdoc}
     */
    public static function tableName()
    {
        return 'cgallery';
    }

    /**
     * {@inheritdoc}
     */
    public function rules()
    {
        return [
            [['year', 'img', 'save_dir'], 'required'],
            [['img', 'save_dir', 'year'], 'string', 'max' => 1024],
        ];
    }

    /**
     * {@inheritdoc}
     */
    public function attributeLabels()
    {
        return [
            'id' => 'ID',
            'year' => 'Year',
            'img' => 'Img',
            'save_dir' => 'Save Dir',
        ];
    }
}

_form.php:

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

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

    <?php
        echo '<label class="control-label">Add Pictures</label>';
        echo FileInput::widget([
            'model' => $model,
            'attribute' => 'files[]',
            'pluginOptions' => [
                'showRemove' => false,
                'uploadLabel' => 'Save',
                'uploadIcon' => '',
                'browseLabel' => '',
                'fileExtensions' => 'any',
            ],
            'options' => ['multiple' => true]
        ]);
    ?>

    <?php ActiveForm::end(); ?>

如果我把“年”从这个过程中去掉,比如:$model2->year = '2010'它工作得很好。我可能需要补充一点,文件被上传(到目录中),但它不会被保存到数据库中。

有谁知道我做错了什么?

编辑:

感谢温顿富兰克林的帮助。解决方案是添加以下行:

$model->load(\Yii::$app->request->post());

更改 GalleryController.php:

    public function actionCreate()
    {
        $model = new MultipleUploadForm();
        $model->load(\Yii::$app->request->post());

        if (Yii::$app->request->isPost) {    
            $model->files = UploadedFile::getInstances($model, 'files');
            if ($model->gaUpload()) {
                return $this->redirect(['index']);
            }
        }

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

1 回答 1

0

在您的控制器year中没有开始设置。检查那个。

if (Yii::$app->request->isPost) {
            $model->year = $_POST[][] // or however you do it in yii
            $model->files = UploadedFile::getInstances($model, 'files');
            if ($model->gaUpload()) {
                return $this->redirect(['index']);
            }
        }
于 2020-01-04T21:50:33.653 回答