PHPackages                             mrzlanx532/laravel-basic-components - 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. [Framework](/categories/framework)
4. /
5. mrzlanx532/laravel-basic-components

ActiveLibrary[Framework](/categories/framework)

mrzlanx532/laravel-basic-components
===================================

Laravel basic components

1.1.16(3mo ago)150MITPHPPHP &gt;=8.0

Since Dec 18Pushed 3mo ago1 watchersCompare

[ Source](https://github.com/mrzlanx532/laravel-basic-components)[ Packagist](https://packagist.org/packages/mrzlanx532/laravel-basic-components)[ Docs](https://github.com/mrzlanx532/laravel-basic-components)[ RSS](/packages/mrzlanx532-laravel-basic-components/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependencies (2)Versions (28)Used By (0)

Оглавление
==========

[](#оглавление)

- [Установка](#install)
- [Важно](#attention)
- [Компоненты и как их использовать](#componentsAndHowToUse)
    - [Трейт `UploadImages` (`Mrzlanx532\LaravelBasicComponents\Traits\Model\UploadImages\UploadImages)`](#uploadImages)
    - [Трейт `UploadFile` (`Mrzlanx532\LaravelBasicComponents\Traits\Model\UploadFile\UploadFile)`](#uploadFile)
    - [Класс `Service` (`Mrzlanx532\LaravelBasicComponents\Service`)](#service)
    - [Класс `Definition` (`Mrzlanx532\LaravelBasicComponents\Definition\Definition`)](#definition)
    - [Класс `PanelForm` (`Mrzlanx532\LaravelBasicComponents\PanelForm\PanelForm`)](#panelForm)
    - [Класс `QueryBuilder` (`Mrzlanx532\LaravelBasicComponents\QueryBuilder`)](#queryBuilder)
    - [Класс `PanelSet` (`Mrzlanx532\LaravelBasicComponents\PanelSet\PanelSet`)](#panelSet)
    - [Класс `PanelSetSortable` (`Mrzlanx532\LaravelBasicComponents\PanelSetSortable\PanelSetSortable`)](#panelSetSortable)
    - [Класс `BrowserFilterPresetController` (`Mrzlanx532\LaravelBasicComponents\Controllers\BrowserFilterPresetController`)](#browserFilterPresetController)

Установка
--------------------------------------------

[](#установка)

1. Устанавливаем пакет: `composer require mrzlanx532/laravel-basic-components`
2. Публикуем настройки: `php artisan vendor:publish --tag="laravel-basic-components-config"`
3. Публикуем миграции: `php artisan vendor:publish --tag="laravel-basic-components-migrations"`
4. Если в проекте не используется `browser` (компонент, который используется в админке), удаляем миграцию `create_duotek_browser_filters_presets`.
5. Выполняем команду: `php artisan migrate`

Важно
------------------------------------------

[](#важно)

1. При установке пакета устанавливается `middleware` для группы `api` `Mrzlanx532\LaravelBasicComponents\Middleware\ReplaceNullValuesInFormData`
2. Приложение должно работать в `UTC (00:00)`, соответственно, в конфиге `config.app` должно быть:
    `timezone => 'UTC'`
3. Все даты для `datetime` и `timestamp` при сохранении должны приводится к `UTC (00:00)`

Компоненты и как их использовать
---------------------------------------------------------------------------------

[](#компоненты-и-как-их-использовать)

### Трейт `UploadImages` (`Mrzlanx532\LaravelBasicComponents\Traits\Model\UploadImages\UploadImages`)

[](#трейт-uploadimages-mrzlanx532laravelbasiccomponentstraitsmodeluploadimagesuploadimages)

#### Зачем нужен?

[](#зачем-нужен)

1. **Сохранение\\Обновление** изображений из параметров `Request` с учетом конфигурации в модели
    ( *в модели определяется нарезать ли картинки и как нарезать* )
2. При **обновлении** также удаляются предыдущие файлы с сервера

#### Как использовать?

[](#как-использовать)

1. Трейт вставляется в модель, которая имеет изображения в свойствах.
    Для правильной конфигурации необходимо в свойство модели `$filePropertiesWithSettings` поместить конфиг по примеру ниже:

```
...
use UploadImages;
...
/**
 * Если есть константа UPLOAD_FILE_TRAIT_DELETING_FILES и она true,
 * то при удалении модели также будут удаляться связанные с ней изображения (и нарезки)
 */
const UPLOAD_FILE_TRAIT_DELETING_FILES = true;

public static $filePropertiesWithSettings = [
    'picture' => [
        '200' => [200, 200, FileHelper::RESIZE_TYPE_SMART],
        '400' => [400, 400, FileHelper::RESIZE_TYPE_FIT_INTO_AREA_WITH_PROPORTIONS],
        '600' => [600, 600, FileHelper::RESIZE_TYPE_FIT_INTO_AREA_WITH_PROPORTIONS_AND_COLOR_CANVAS, '#ffffff', 'center'], // Возможные значение 4-го параметра: top-left, top, top-right, left, center, right, bottom-left, bottom, bottom-right
    ],
    'background_picture' => null, // null означает сохранить как есть (без нарезок)
];
...
```

2. Для корректного вывода в ресурсах делаем так:

```
...
class UserResource extends JsonResource
{
    /* @var $resource User */
    public $resource;

    /**
     * @throws InvalidFilePropertiesWithSettingsPropertyConfiguration
     */
    public function toArray($request): array
    {
        return [
            'id' => $this->resource->id,
            'photo' => $this->resource->getFileLinksBySettings('photo'),
            'photo2' => $this->resource->getFileLinksBySettings('photo2', 'http://api.tip.ru'), // возможность кастомно задать домен, не смотря на UPLOAD_FILE_DOMAIN
        ];
    }
}
```

3. Если нужно чтобы файлы отдавались с абсолютным путем через метод `getFileLinksBySettings` можно:

- Глобально добавить `UPLOAD_FILE_DOMAIN=http://api.example.ru` в `.env` файл в корне проекта
- Локально добавить `->getFileLinksBySettings('photo', 'http://api.example.ru')`

4. Если нужно в обособленном ресурсе, не привязываясь к классу, вывести изображения по конфигу модели:

```
...
use Mrzlanx532\LaravelBasicComponents\Helpers\FileHelper\FileHelper;
...
class UserResource extends JsonResource
{
    /* @var $resource User */
    public $resource;

    /**
     * @throws InvalidFilePropertiesWithSettingsPropertyConfiguration
     */
    public function toArray($request): array
    {
        return [
            'id' => $this->resource->id,
            'photo1' => FileHelper::getFileLinksBySettings(User::class, 'photo1', $this->resource->photo1),
            'photo2' => FileHelper::getFileLinksBySettings(User::class, 'photo2', $this->resource->photo2),
        ];
    }
}
```

### Трейт `UploadFile` (`Mrzlanx532\LaravelBasicComponents\Traits\Model\UploadFile\UploadFile`)

[](#трейт-uploadfile-mrzlanx532laravelbasiccomponentstraitsmodeluploadfileuploadfile)

#### Зачем нужен?

[](#зачем-нужен-1)

Трейт применяется к смежным таблицам. (например: таблица `user_files`, где есть колонка `user_id` и `file_id`)
Позволяет удобно сохранять, обновлять, удалять файлы взаимодействуя с таблицей `files`.
Также позволяет удобно настраивать конфигурацию сохранения (см. ниже)

При обновление модели удаляет предыдущий файл и заменяет новым.
При удаление модели удаляет файл (если нету трейта `SoftDeletes`).
При удалении через `forceDelete` файл тоже физически удаляется.

#### Как использовать?

[](#как-использовать-1)

1. Создаем модель для промежуточной таблицы файлов (например: `user_files`)

```
