تالار گفتمان nCIS.ir

نسخه‌ی کامل: درست کار نکردن ویجت FileInput (حل شد)
شما در حال مشاهده نسخه آرشیو هستید. برای مشاهده نسخه کامل کلیک کنید.
سلام
داشتم توی Yii از ویجت kartik از fileinputش استفاده می کردم. اولش خوب کار می کرد ولی وسط کار, از کار افتاد. از  متغیر پست شده اون var_dump گرفتم مقدار ارسال شده رو از نوع string و خالی نشون میده. وقتی از UploadedFile::getInstance هم استفاده می کنم, توی خروجیش مشخصات فایل آپلود شده رو می ده ولی فاقد فایله و توی جابجایی فایل خطا می گیره.
لطفا دوستان راهنمایی کنن.
اینم کدهایی که استفاده کردم:
<?=
    $form->field($model, 'imageLogo')->widget(FileInput::classname(), [
       'options' => ['accept' => 'image/*',],
       'language' => 'fa',
       'pluginOptions' => [
           'showUpload' => FALSE,
           'allowedFileExtensions' => ['jpeg', 'jpg', 'gif', 'png'],
           'initialPreview' => [
               (is_null($model->logo) ? NULL :
                       Html::img(Yii::getAlias('@brand') . DIRECTORY_SEPARATOR . $model->logo, [
                            'class' => 'file-preview-image',
                            'alt' => $model->title_en,
                            'title' => $model->title_fa
                        ])),
           ],
       ],
   ]);
   ?>

اینم توی کنترولر:
public function actionUpdate($id) {
        $model = $this->findModel($id);
       //For delete old logo image and create new image for update
       $oldlogo = (is_null($model->logo) ?
                       NULL : Yii::getAlias('@brand') . DIRECTORY_SEPARATOR . $model->logo);

       if ($model->load(Yii::$app->request->post())) {
           if (!empty($model->imageLogo)) {
               $image = UploadedFile::getInstance($model, 'imageLogo');
               
               $ext = end((explode(".", $image->name)));
               $model->logo = $model->id . '_' . $model->title_en . ".{$ext}";
               //create path for save new image
               $path = Yii::getAlias('@brand') . DIRECTORY_SEPARATOR . $model->logo;
           }
           if ($model->save()) {
               if (!empty($model->imageLogo)) {
                   //delete old logo and save new logo
                   if (file_exists($oldlogo)) {
                       unlink($oldlogo);
                   }
                   $image->saveAs($path);
                   CommonFunctions::resize($path, 200, 200, $path);
               }
               return $this->redirect(['view', 'id' => $model->id]);
           }
       } else {
           return $this->render('update', [
                        'model' => $model,
            ]);
       }
   }
دوباره سلام
از اینکه انقدر لطف داشتین و به مشکلات کاربران رسیدگی می کنین ممنونم.
مشکل بنده که حل شد. گفتم حداقل راه حلش رو اینجا بزارم تا یکی مثل من به این مشکل برخورد, مشکلش حل بشه.
توی کنترولر 2 خط از کد رو جابجا کردم و مشکل حل شد:
$image = UploadedFile::getInstance($model, 'imageLogo');
if (!empty($image)) {
...
ممنون از اینکه راه حل رو به اشتراک گذاشتین. قرار نیست پاسخ همه مشکلات پیش ما باشه.