/**
  * Download file from the link
  * @param string $url
  * @param string $path
  * @param string $name
  * @param string $extension
  * @return array|bool
  * @throws Exception
  */
 public static function saveFromUrl($url, $path, $name = null, $extension = 'png')
 {
     if (!FileHelper::createDirectory($path)) {
         throw new Exception("Directory not created \"{$path}\".");
     }
     $file = file_get_contents(urldecode($url));
     $extension = trim($extension, " \t\n\r\v.");
     if ($name == null) {
         $name = FileHelper::generateRandomName($path, $extension);
     } else {
         $name = $name . '.' . $extension;
     }
     if (file_put_contents($path . DIRECTORY_SEPARATOR . $name, $file)) {
         return ['name' => $name, 'path' => $path];
     }
     return false;
 }
 /**
  * Сохранение файла на сервере
  */
 public function save()
 {
     // Если это действительно экземпляр объекта файла
     if ($this->file instanceof UploadedFile) {
         if (!FileHelper::createDirectory($this->_path)) {
             throw new InvalidParamException("Directory specified in '{$this->_path}' attribute doesn't exist or cannot be created.");
         }
         $name = FileHelper::getRandomFileName($this->_path, $this->file->getExtension());
         $filePath = $this->_path . DIRECTORY_SEPARATOR . $name;
         // Если оригинальная картинка сохранилась
         if ($this->file->saveAs($filePath)) {
             $imageInfo = getimagesize($filePath);
             list($width, $height) = $imageInfo;
             $this->_width = $width;
             $this->_height = $height;
             $this->_name = $name;
             /** @var ImagePathMap $imagePathMap */
             $imagePathMap = Yii::$app->get('imagePathMap', false);
             if ($imagePathMap != null) {
                 $imagePathMap->add($this->_name, $this->_pathID);
             }
             return true;
         }
     }
     return false;
 }
 /**
  * Init variables
  * @throws \yii\web\HttpException
  * @throws \yii\web\NotFoundHttpException
  */
 public function afterValidate()
 {
     parent::afterValidate();
     $this->_pathRootObject = $this->basePath . DIRECTORY_SEPARATOR . $this->folder;
     $this->_urlRootObject = $this->baseUrl . DIRECTORY_SEPARATOR . $this->folder;
     if (!is_dir($this->_pathRootObject)) {
         HttpError::the404();
     }
     $this->_pathObject = $this->_pathRootObject . DIRECTORY_SEPARATOR . $this->id;
     $this->_urlObject = $this->_urlRootObject . DIRECTORY_SEPARATOR . $this->id;
     if (!is_dir($this->_pathObject) && !FileHelper::createDirectory($this->_pathObject)) {
         HttpError::the500('Can not create directory: ' . $this->_pathObject);
     }
     $this->_pathObjectFile = $this->_pathObject . DIRECTORY_SEPARATOR . $this->width . 'x' . $this->height . '_' . $this->name;
     $this->_urlObjectFile = $this->_urlObject . DIRECTORY_SEPARATOR . $this->width . 'x' . $this->height . '_' . $this->name;
     $this->_pathObjectFileOrigin = $this->_pathObject . DIRECTORY_SEPARATOR . $this->name;
     $this->_pathObjectPlaceholder = $this->_pathRootObject . DIRECTORY_SEPARATOR . $this->width . 'x' . $this->height . '_' . $this->placeholder;
     $this->_urlObjectPlaceholder = $this->_urlRootObject . DIRECTORY_SEPARATOR . $this->width . 'x' . $this->height . '_' . $this->placeholder;
     $this->_pathObjectPlaceholderOrigin = $this->_pathRootObject . DIRECTORY_SEPARATOR . $this->placeholder;
     $this->_pathRootPlaceholder = $this->basePath . DIRECTORY_SEPARATOR . $this->width . 'x' . $this->height . '_' . $this->placeholder;
     $this->_urlRootPlaceholder = $this->baseUrl . DIRECTORY_SEPARATOR . $this->width . 'x' . $this->height . '_' . $this->placeholder;
     $this->_pathRootPlaceholderOrigin = $this->basePath . DIRECTORY_SEPARATOR . $this->placeholder;
 }
 /**
  * Удаление папки с изображениями модели
  */
 public function afterDelete()
 {
     FileHelper::removeDirectory($this->_basePath);
 }