Image Upload

Hallo Zusammen

Ich habe ein Formular mit 6 Bild Uploads. Der Benutzer soll jederzeit eines der Bilder aktualisieren können. Ich bring das nicht fertig. Es überschreibt mir immer die anderen Bilder wieder mit Null. Wie kann ich prüfen ob der Benutzer ein Feld (Upload) geändert hat?

Vielen Dank

Beat

[size="2"]View: (benutze [/size][size="2"]yii2-widget-fileinput[/size] [size="2"]https://github.com/k...idget-fileinput)[/size]




<?=  $form->field($model, 'logo')->widget(FileInput::classname(), [

            'options' => ['accept' => 'images/upload/*'],

            'pluginOptions' => [

              'initialPreview'=>[

                Html::img('images/upload/'. $model->logo)

              ],

            ]

          ]); ?>

          

          <?=  $form->field($model, 'praxis1')->widget(FileInput::classname(), [

            'options' => ['accept' => 'images/upload/*'],

            'pluginOptions' => [

              'initialPreview'=>[

                Html::img('images/upload/'. $model->praxis1)

              ],

            ]

          ]); ?>

Controller:


  public function actionUpdate()

  {


    $model = $this->findbyuser(Yii::$app->user->identity->id);


    if ($model->load(Yii::$app->request->post())  ) {


      $model->upload('logo');

      $model->upload('praxis1');

      $model->upload('praxis2');

      $model->upload('praxis3');

      $model->upload('team1');

      $model->upload('team2');


      $model->save();


        return $this->redirect(['view', 'id' => $model->id]);

      } else {

        return $this->render('wizard', [

          'model' => $model,

        ]);

      }

    }

[size="2"]Model: [color="#000080"]Hier müsste ich irgendwie erkennen ob der Benutzer ein Bild geändert hat ansonsten ist keine Aktion notwendig.[/color][/size]


  public function upload($field) {


    $image = UploadedFile::getInstance($this, $field);


    if(!empty($image)){


      $rnd = rand(0,9999);

      $logo_name = Yii::$app->user->identity->id . '_' . $field .'_' . $rnd . '.' . $image->extension;


      Yii::$app->params['uploadPath'] = Yii::$app->basePath . '/web/images/upload/';

      $path = Yii::$app->params['uploadPath'] . $logo_name;

      $image->saveAs($path);

      $this->$field = $logo_name;


    }

  }

Mit der Übergabe des alten Wertes funktioniert es. Das geht jedoch bestimmt viel eleganter?

Controller:




  public $old_logo = "";

  public $old_praxis1 = "";




public function actionUpdate()

  {


    $model = $this->findbyuser(Yii::$app->user->identity->id);


    $old_logo = $model->logo;

    $old_praxis1 = $model->praxis1;




    if ($model->load(Yii::$app->request->post())  ) {


      $request = Yii::$app->request;


      $model->upload('logo', $old_logo);

      $model->upload('praxis1', $old_praxis1);


      $model->save();


      return $this->redirect(['view', 'id' => $model->id]);

    } else {

      return $this->render('wizard', [

        'model' => $model,

      ]);

    }

  }



Model:


  public function upload($field, $oldfile) {


      $image = UploadedFile::getInstance($this, $field);


      if(isset($image)){


        $rnd = rand(0,9999);

        $logo_name  = Yii::$app->user->identity->id . '_' . $field .'_' . $rnd . '.' . $image->extension;


        Yii::$app->params['uploadPath'] = Yii::$app->basePath . '/web/images/upload/';

        $path = Yii::$app->params['uploadPath'] . $logo_name;

        $image->saveAs($path);

        $this->$field = $logo_name;


      } else {

        $this->$field = $oldfile;

      }

  }