Проблема с Yii2-images

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Vladlen
Сообщения: 5
Зарегистрирован: 2017.03.01, 22:50

Проблема с Yii2-images

Сообщение Vladlen »

Пытаюсь реализовать закачку фотографий на сервер и прикрепление её к определённой модели при помощи Yii2-images.
1. Установил Yii2-images по этой ссылке https://github.com/CostaRico/yii2-images

1. Сделал миграции

Код: Выделить всё

php yii migrate/up --migrationPath=@vendor/costa-rico/yii2-images/migrations
в результате получил таблицу bl_migration и таблицу bl_image.

2. В config->web.php добавил модуль

Код: Выделить всё

'yii2images' => [
            'class' => 'rico\yii2images\Module',
            //be sure, that permissions ok 
            //if you cant avoid permission errors you have to create "images" folder in web root manually and set 777 permissions
            'imagesStorePath' => 'upload/store', //path to origin images
            'imagesCachePath' => 'upload/cache', //path to resized copies
            'graphicsLibrary' => 'GD', //but really its better to use 'Imagick' 
            'placeHolderPath' => '@webroot/images/placeHolder.png', // if you want to get placeholder when image not exists, string will be processed by Yii::getAlias
        ],
3. Добавляю behaviors в модель в админской части.

Код: Выделить всё

public function behaviors()
    {
        return [
            'image' => [
                'class' => 'rico\yii2images\behaviors\ImageBehave',
                 ]
        ];
    }
4. В контроллере создаю из загруженного файла экземпляр объекта.

Код: Выделить всё

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

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            
            $model->image = UploadedFile::getInstance($model,'image');           
                          
            if(!empty($model->image)){                
                $model->upload();        
            }            
//            Yii::$app->session->setFlash('success',"Новость {$model->title_ua} обновлена");
                       
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    }
5. В модели пропускаю через валидатор и сохраняю загруженный файл на сервере.

Код: Выделить всё

public function upload(){//        
       
        if($this->validate()){            
            $path = 'upload/store/'.$this->image->baseName.'.'.$this->image->extension;
            $this->image->saveAs($path);            
            $this->attachImage($path);           
            @unlink($path);            
            return true;
        }else{
            return false;
           }
        }
НА этом этапе всё в порядке, фото загружается в папку и добавляется в таблицу image.

6. Теперь хочу вывести фото во view

7.Добавляю behaviors в модель.

Код: Выделить всё

public function behaviors()
    {
        return [
            'image' => [
                'class' => 'rico\yii2images\behaviors\ImageBehave',
            ]
        ];
    }
8. В action делаю запрос в базу и помещаю все в переменную и вызываю getImage.

Код: Выделить всё

public function actionNewsconsulate($id)  {     
          
        $news = Consulate_news::findOne($id);
        $main=$news->getImage();
        
       
        if (is_null($news)) {
                throw new NotFoundHttpException('The requested page does not exist.');
            }
        $sort = Consulate_news::find()
                ->where(['hide' => 0])
                ->orderBy(['date' => SORT_DESC])
                ->limit(8)
                ->all(); 
        

        $this->setMeta($news->title_ua,$news->keywords_ua,$news->description_ua);  

        return $this->render(            
               '/site/news/consulate-news/news-consulate',
            [        
                    'news' => $news,
                    'main' => $main,
                    'sort' => $sort            
            ]);
    } 
и вот теперь проблема, фото в папке есть, ссылка на фото в таблице есть, а во view не отображается.

Код: Выделить всё

object(rico\yii2images\models\PlaceHolder)[101]
  private 'modelName' => string '' (length=0)
  private 'itemId' => string '' (length=0)
  public 'filePath' => string 'placeHolder.png' (length=15)
  public 'urlAlias' => string 'placeHolder' (length=11)
  private 'helper' (rico\yii2images\models\Image) => boolean false
  [b]private '_attributes' (yii\db\BaseActiveRecord) => 
    array (size=0)
      empty[/b]
  private '_oldAttributes' (yii\db\BaseActiveRecord) => null
  private '_related' (yii\db\BaseActiveRecord) => 
    array (size=0)
      empty
  private '_errors' (yii\base\Model) => null
  private '_validators' (yii\base\Model) => null
  private '_scenario' (yii\base\Model) => string 'default' (length=7)
  private '_events' (yii\base\Component) => 
    array (size=0)
      empty
  private '_behaviors' (yii\base\Component) => null
  private '_module' (rico\yii2images\models\Image) => 
    object(rico\yii2images\Module)[102]
      public 'imagesStorePath' => string 'upload/store' (length=12)
      public 'imagesCachePath' => string 'upload/cache' (length=12)
      public 'graphicsLibrary' => string 'GD' (length=2)
      public 'controllerNamespace' => string 'rico\yii2images\controllers' (length=27)
      public 'placeHolderPath' => string '@webroot/images/placeHolder.png' (length=31)
      public 'waterMark' => boolean false
      public 'className' => null
      public 'params' => 
        array (size=0)
          empty
Пожайлуста, помогите, пока знаний не хватает решить эту проблему.
Последний раз редактировалось Vladlen 2017.04.01, 16:31, всего редактировалось 1 раз.
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Проблема с Yii2-images

Сообщение urichalex »

Неужели так сложно код обернуть в специальный тэг? Или вы кодите в блокноте и для вас это норма?
Vladlen
Сообщения: 5
Зарегистрирован: 2017.03.01, 22:50

Re: Проблема с Yii2-images

Сообщение Vladlen »

Я первый раз выкладываю код на подобный ресурс и у меня даже не было мыслей что нужно код оборачивать в специальный тег, но теперь буду стараться это делать.Спасибо.
А как насчёт решения моей проблемы, сможешь помочь?
urichalex
Сообщения: 994
Зарегистрирован: 2015.08.07, 11:03

Re: Проблема с Yii2-images

Сообщение urichalex »

Не работал с этим расширением.
Что именно не отобржется? Ссылки на картинки формируются? Если да, то какие ссылки?
Vladlen
Сообщения: 5
Зарегистрирован: 2017.03.01, 22:50

Re: Проблема с Yii2-images

Сообщение Vladlen »

фотографии загружаются в папку и отображаются в таблице image.
Проблема в том,что когда я в контроллере вызываю getImage() у меня не подгружаются данные из таблицы image.
Krash
Сообщения: 29
Зарегистрирован: 2016.04.19, 12:43

Re: Проблема с Yii2-images

Сообщение Krash »

Vladlen писал(а): 2017.04.01, 01:17 но теперь буду стараться это делать
Вы можете отредактировать свое сообщение
Vladlen
Сообщения: 5
Зарегистрирован: 2017.03.01, 22:50

Re: Проблема с Yii2-images

Сообщение Vladlen »

Krash писал(а): 2017.04.01, 12:26
Vladlen писал(а): 2017.04.01, 01:17 но теперь буду стараться это делать
Вы можете отредактировать свое сообщение
Да,конечно
potter062
Сообщения: 1
Зарегистрирован: 2017.03.12, 12:52

Re: Проблема с Yii2-images

Сообщение potter062 »

Ребят столкнулся с такой же проблемой если можно напишите как можно решить а то ваша дискуссия прервалась и не понятно решение проблемы
yii2-images_fix_bug
Сообщения: 1
Зарегистрирован: 2019.05.14, 23:07

Re: Проблема с Yii2-images

Сообщение yii2-images_fix_bug »

Здравствуйте! Я решил проблему.
1. Вместо src='{$img->getUrl()} нужно прописать src='{$img->getPath()};
2. Переходим в \vendor\costa-rico\yii2-images\models\Image.php
3.Меняем метод GetPath следующим образом :

Код: Выделить всё

public function getPath($size = false){
        $urlSize = ($size) ? '_'.$size : '';
        $base = $this->getModule()->getCachePath();
        $sub = $this->getSubDur();

        $origin = $this->getPathToOrigin();

        $filePath = $base.'/'.
            $sub.'/'.$this->urlAlias.$urlSize.'.'.pathinfo($origin, PATHINFO_EXTENSION);;
        if(!file_exists($filePath)){
            $this->createVersion($origin, $size);

            if(!file_exists($filePath)){
                throw new \Exception('Problem with image creating.');
            }
        }

        return 'http://localhost:81/'.$filePath;
    }
Ответить