Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Upload multiple files yii2

Tell me where I was wrong, everything is tried

my view file:

echo FileInput::widget([
 'model' => $model,
 'attribute' => 'files[]',
 'options' => ['multiple' => true]
]);

Also i added

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

enctype option to form element

Model: i add two variables as property:

public $files; // files instance
public $serialize; // set string which store the files

in rules serialize as string, and files:

[['files'], 'file', 'skipOnEmpty' => true, 'extensions' => 'gif, jpg, png, pdf, doc, docx', 'maxFiles' => 10],

and controller action:

public function actionUpdate($id)
    {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post())) {
            $oldFiles = $model->serialize;
            $files = UploadedFile::getInstance($model, 'files');

            if($files === false){
              $model->serialize = $oldFiles;
            } else {
              $serialize = [];

              if($model->validate()){
                foreach($files as $file){
                  $ext = end((explode(".", $file)));
                  $filename = Yii::$app->security->generateRandomString().".{$ext}";
                  $serialize[] = $filename;
                  $file->saveAs(Yii::$app->basePath . '/web/image/' . $filename);
                }
              } else {

              }
              //print_r($model->getErrors()); die();
              $model->serialize = serialize($serialize);
            }
            $model->save();
            return $this->redirect(['view', 'id' => $model->news_id]);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    }

So, $files is empty, why? also i get a "4" code error in $_FILES array

like image 239
YiiDev Avatar asked Feb 16 '26 03:02

YiiDev


1 Answers

It should be getInstances for multiple files.

$files = UploadedFile::getInstances($model, 'files');
like image 79
ck_arjun Avatar answered Feb 19 '26 17:02

ck_arjun



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!