PHPackages                             masterflash-ru/storage - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [File &amp; Storage](/categories/file-storage)
4. /
5. masterflash-ru/storage

ActiveService[File &amp; Storage](/categories/file-storage)

masterflash-ru/storage
======================

Сервис-библиотека для обработки файлов в хранилище

1.2.8(3y ago)12111BSD-3-ClausePHPPHP ^7.2 || ^8.0

Since Jan 16Pushed 3y ago1 watchersCompare

[ Source](https://github.com/masterflash-ru/storage)[ Packagist](https://packagist.org/packages/masterflash-ru/storage)[ Docs](https://masterflash.ru/)[ RSS](/packages/masterflash-ru-storage/feed)WikiDiscussions master Synced 3d ago

READMEChangelog (10)Dependencies (2)Versions (16)Used By (1)

библиотека для работы с хранилищем файлов

После установки следует загрузить в базу дамп из папки data, или использовать пакет masterflash-ru/migration, и загрузить дамп.

Установка composer require masterflash-ru/storage

Библиотека предназначена для хранении файлов в файловом хранилище. По требованию возвращается имя файла. В базе данных хранится только имя файла, причем для одного элемента может быть множество файлов с разными размерами.

В базу вместе с именами файлов записывается номер версии библиотеки, для будущих расширений, что бы в существующих хранилищах не производить изменения.

Регистрация в ZF3 производится стандартным образом, экземпляр библиотеки можно получить аналогично как и другие объекты, обычно в фабрике контроллера, или другой библиотеки-сервиса.

Конфигурация библиотеки описана ниже в примере, эту конфигурацию следует разместить в конфигурацию приложения:

```
........
    /*хранилище и обработка (ресайз) фото*/
    "storage"=>[

        /*хранит загруженные файлы, готовые для обработки
        это промедуточное хранение
        */
        'data_folder'=>"data/images",

        /*
        *Именованные хранилища фото в виде множества вложенных папок
        *по умолчанию имеется всегда default
        *уровень вложений и размеры имен каталогов определяются параметром в фильтр CopyToStorage
        */
        'file_storage'=>[
            'default'=>[
                'base_url'=>"media/pics/",
            ],
        ],

        /*чистить хранилище только по расписанию, используется при очень больших хранилищах
        *когда за текущую операцию не успевает обойти все каталоги
        * включите по расписанию обращение к адресу http://site.ru/clear-storage-cron
        */
        "clear_storage_only_cron"=>false,
        'items'=>[
            /*хранилище для ленты новостей, ключ это имя секции, которая используется для работы
            *он же является именем раздела, под которым записываются и считываются файлы*/

            "news"=>[
                "description"=>"Хранение фото новостей",
                'file_storage'=>'default', /*имя хранилища*/
                'file_rules'=>[
                            'admin_img'=>[
                                'filters'=>[
                                        CopyToStorage::class => [   /*Наличе этого фильтра ОБЯЗАТЕЛЬНО!*/
                                                    'folder_level'=>1,
                                                    'folder_name_size'=>3,
                                                    'strategy_new_name'=>'translit' /*стратегия создания нового имени, none, md5, sha1, translit, uniqid*/
                                        ],
                                        ImgResize::class=>[
                                                    "method"=>1,
                                                    "width"=>150,
                                                    "height"=>150,
                                                    'adapter'=>Gd::class,
                                        ],
                                        ImgOptimize::class=>[
                                                    "jpegoptim"=>85,
                                                    "optipng"=>3,
                                        ],
                                        Watermark::class=>[
                                                    "waterimage"=>"data/images/water2.png",
                                                    'adapter'=>'Consoleimagick',
                                        ],

                                ],
                                'validators' => [/*валидаторы достаточно применить для одной ветки, т.к. последующие ветки используют исходное изображание вновь*/
                                        IsImage::class=>[],
                                        ImageSize::class => [
                                            'minWidth' => 500,
                                            'minHeight' => 250,
                                    ],
                                ],
                            ],
                            'anons'=>[
                                'filters'=>[
                                        CopyToStorage::class => [
                                                    'folder_level'=>1,
                                                    'folder_name_size'=>3,
                                        ],
                                        ImgResize::class=>[
                                                    "method"=>1,
                                                    "width"=>500,
                                                    "height"=>250,
                                                    'adapter'=>'gd',
                                        ],
                                ],
                            ],
                ],

            ],//news
        ],
    ],
.......
```

```
/*объект ImagesLib регистрируется в менеджере, его можно извлечь в фабриках, если нужна обработка*/
use Mf\Storage\Service\ImagesLib;

/*получить экземпляр*/
$imglib=$container->get(ImagesLib::class);
```

Запись в библиотеку:

```
/*
вначале нужно выбрать секцию из конфига, в которой указаны правила обработки фото (куда писать, и как уменьшать)
$name - имя секции конфига с правилами обработки файлов, из примера выше это "news"
*/
$ImgLib->selectStorageItem($name);

/*
далее нужно передать исходный файл в виде пути и имени, имя раздела и идентификатор записи раздела
$filename - исходное имя файла, как правило в data/datastorage,
$razdel - имя раздела, например, news (обычно совпадает с именем массива фото, и равно ключу в имени конфига),
$razdel_id - внутренний идентификатор элемента, например, ID новости в ленте
*/
$ImgLib->saveImages($filename,$razdel,$razdel_id);
```

Чтение:

```
/*
$razdel_name - строка имени раздела, например, news
$id - ID новости, или какой-либо идентификатор под которым хранится изображение,
$item_name - имя самого изображения, например, anons
полностью готовый URL путь+имя файла для подставновки в тег
*/
$img=$ImgLib->loadImage($razdel_name,$id,$item_name);
```

Удаление в разделе элемента:

```
//$razdel_name - имя раздела
$id - идентификатор раздела, например, ID новости
$ImgLib->deleteFile($razdel_name,$id);
```

Удаление всех элементов во всем разделе:

```
//$razdel_name - имя раздела
$ImgLib->deleteFileRazdel($razdel_name);
```

Библиотека регистрирует помощник для view, при помощи которого можно получить сразу имя файла и путь, готовых для тега ![]()По сути помощник вызывает loadImage с этим же параметрами, дополнительно обрабатывает помощником basePath фреймворка

```
