PHPackages                             prettybx/support - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. prettybx/support

ActivePackage[Utility &amp; Helpers](/categories/utility)

prettybx/support
================

Pretty Bitrix

0.0.4(5y ago)195.5k↓22.5%6[6 issues](https://github.com/PrettyBx/prettybxsupport/issues)1MITPHP

Since May 28Pushed 4y ago2 watchersCompare

[ Source](https://github.com/PrettyBx/prettybxsupport)[ Packagist](https://packagist.org/packages/prettybx/support)[ RSS](/packages/prettybx-support/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (4)Dependencies (5)Versions (6)Used By (1)

Pretty Bitrix (Support)
=======================

[](#pretty-bitrix-support)

[![Scrutinizer Code Quality](https://camo.githubusercontent.com/8efcb242cff9b6d9875aec2b30121ea23629f7a5e066d220a0b99468ecff7dd9/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f617274656d2d70726f7a6f726f762f7072657474796278737570706f72742f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/artem-prozorov/prettybxsupport/?branch=master)[![Build Status](https://camo.githubusercontent.com/d631fd970b185d175263e02e8f21865999bb88cc87e309b682edc4a1afc23834/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f617274656d2d70726f7a6f726f762f7072657474796278737570706f72742f6261646765732f6275696c642e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/artem-prozorov/prettybxsupport/build-status/master)[![Code Intelligence Status](https://camo.githubusercontent.com/32ce6372d3ad1b693f4f184ff3fa2706ecac26cf32fab73d8e6a5fd26271bd48/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f617274656d2d70726f7a6f726f762f7072657474796278737570706f72742f6261646765732f636f64652d696e74656c6c6967656e63652e7376673f623d6d6173746572)](https://scrutinizer-ci.com/code-intelligence)

Библиотека для упрощения работы с Битрикс

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

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

```
composer require prettybx/support

```

Начало работы
-------------

[](#начало-работы)

1. Инициализируйте сервис провайдер в `local/php_interface/init.php`:

```
(new \PrettyBx\Support\Providers\BitrixMainProvider())->register();

```

DI container
------------

[](#di-container)

Для реализации Dependency Injection предлагается использовать Illuminate/Container (DI container из фреймворка Laravel). Для того, чтобы получить экземпляр контейнера, можно воспользоваться хэлпером `container()`Пример:

```
$bar = container()->make(\Foo\Bar::class); // получим экземпляр класса \Foo\Bar

```

Фасады
------

[](#фасады)

Для удобства тестирования библиотека подключает к проекту и адаптирует к работе ларавелевские фасады. Чтобы сдлать свой фасад, нужно создать класс, унаследовать его от `PrettyBx\Support\Base\AbstractFacade` и реализовать в нем метод `getFacadeAccessor`, который должен вернуть название класса, спрятанного за фасадом. Пример:

```
class Foo
{
    public function bar()
    {
        return 'Hi!';
    }
}

class FooFacade extends \PrettyBx\Support\Base\AbstractFacade
{
    protected static function getFacadeAccessor()
    {
        return Foo::class;
    }
}

class Service
{
    public function doAction()
    {
        echo FooFacade::bar(); // Hi!
    }
}

```

В тестах можно использовать так:

```
FooFacade::shouldReceive('bar')->andReturn('Hi!');

```

Глобальные переменные Bitrix
----------------------------

[](#глобальные-переменные-bitrix)

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

### $GLOBALS\['APPLICATION'\]

[](#globalsapplication)

Получить экземпляр класса \\CMain, размещенные в `$GLOBALS['APPLICATION']`, можно с помощью фасада `PrettyBx\Support\Facades\CMain`Пример:

```
// Вместо этого
global $APPLICATION;

$contants = $APPLICATION->GetFileContent("/foo/bar.baz");

// Делаем так:
$contants = \PrettyBx\Support\Facades\CMain::GetFileContent("/foo/bar.baz");

```

### $GLOBALS\['USER'\]

[](#globalsuser)

Получить экземпляр класса \\CUser можно с помощью фасада `PrettyBx\Support\Facades\CUser`. Пример получения текущего идентификатора пользователя:

```
$userId = \PrettyBx\Support\Facades\CUser::getId();

```

Пример авторизации:

```
\PrettyBx\Support\Facades\CUser::login($login, $password);

```

### \\Bitrix\\Main\\Application

[](#bitrixmainapplication)

Данный класс является основополагающим классов в D7, но в нем пристутствуют статические методы. Кроме того, он является синглтоном на уровне кода, то есть получить его экземпляр можно только с помощью метода getInstance. Это очень сильно затрудняет тестирование. Чтобы сделать тестирование этого класса возможным, предлагается использовать его фасад `PrettyBx\Support\Facades\Application`.

Удобная загрузка модулей Bitrix
-------------------------------

[](#удобная-загрузка-модулей-bitrix)

В разрабатываемых классах очень часто нужно загружать модули Bitrix. Библиотека предоставляет разработчику удобный инструмент для загрузки модулей. Предлагается использовать трайт `PrettyBx\Support\Traits\LoadsModules`. Пример:

```
use PrettyBx\Support\Traits\LoadsModules;

class SomeService
{
    use LoadsModules;

    protected $modules = ['iblock', 'catalog'];

    public function __construct()
    {
        $this->loadModules(); // Загрузит те модули, которые указаны в $this->modules
    }

    public function loadOnDemand()
    {
        $this->loadModule('sale'); // Загрузит модуль, который был передан
    }
}

```

В случае, если указанный модуль не может быть загружен, будет выброшено исключение `\RuntimeException`

Работа с конфигурацией
----------------------

[](#работа-с-конфигурацией)

Библиотека предоставляет удобный инструмент для работы с конфигурацией Bitrix, размещенной в файле `bitrix/.settings.php`. Для того, чтобы получить значение элемента конфигурации, можно воспользоваться вспомогательной функцией `config`.

```
var_dump(config("connections"));

```

Значение многомерного массива можно получить, разделив ключи массива точками, например:

```
var_dump(config("connections.default.host")); // $config['connections]['default']['host']

```

Валидация данных
----------------

[](#валидация-данных)

Для валидации данных используется библиотека Illuminate/Validation Для того, чтобы использовать ее, предлагается к нужному классу подключить трайт `PrettyBx\Support\Traits\Validatable`Пример

```
use PrettyBx\Support\Traits\Validatable;

class Service
{
    use Validatable;

    public function getValidatedRequestData(): array
    {
        $rules = [
            'ID' => 'required|numeric',
            'TYPE' => 'required|string',
        ];

        $this->validate($_POST, $rules);
    }
}

```

В случае, если валидация данных провалится, будет выброшено исключение `\InvalidArgumentException`Список всех доступных правил валидации можно смотреть здесь

Работа с событиями
------------------

[](#работа-с-событиями)

Всю работу с событиями предлагается вынести в один класс - EventServiceProvider. Для того, чтобы зарегистрировать свои обработчики событий, создайте класс, наследующийся от `PrettyBx\Support\Providers\AbstractEventServiceProvider`. Укажите события, которые нужно обработать, в массиве в защищенном свойстве `events`. Пример:

```
use PrettyBx\Support\Providers\AbstractEventServiceProvider;

class EventServiceProvider extends AbstractEventServiceProvider
{
    protected array $events = [
        [
            'module' => 'iblock',
            'event' => 'OnAfterIBlockElementAdd',
            'handler' => [\App\EventListeners\IblockEventListener::class, 'afterAdd'],
            'sort' => 100,
        ],
        [
            'module' => 'iblock',
            'event' => 'OnAfterIBlockElementUpdate',
            'handler' => [\App\EventListeners\IblockEventListener::class, 'afterUpdate'],
            'sort' => 100,
        ],
        [
            'module' => 'iblock',
            'event' => 'OnBeforeIBlockElementDelete',
            'handler' => 'function_name_here',
            'sort' => 100,
        ],
    ];
}

```

После этого зарегистрируйте этот класс в `php_interface/init.php`:

```
(new EventServiceProvider())->register();

```

При регистрации EventServiceProvider подпишет указанные обработчики на указанные события.

Работа с файловой системой
--------------------------

[](#работа-с-файловой-системой)

Для удобства работы с файлами есть класс `PrettyBx\Support\Filesystem\Manager`, который представляет из себя набор команд для выполнения файловых операций. Рекомендуется зарегистрировать этот класс как синглтон с помощью сервис провайдера:

```
(new \PrettyBx\Support\Providers\FileServiceProvider())->register();

```

Теперь файловые операции, такие как переименование, проверка на существование, получение содержимого, удаление и тд, можно осуществлять следующим образом:

```
use PrettyBx\Support\Filesystem\Manager;

$manager = container()->make(Manager::class);

$file = '/foo/bar';

$contents = $manager->getContents($file);

```

или через фасад:

```
use PrettyBx\Support\Facades\FileManager;

$file = '/foo/bar';
$contents = FileManager::getContants($file);

```

Расширение функционала для работы с файлами Класс `PrettyBx\Support\Filesystem\Manager` реализует трайт `Illuminate\Support\Traits\Macroable`, что позволяет на лету добавлять в него свои методы. Рекомендуется делать это в сервис провайдерах. Пример добавления метода append:

1. В сервис провайдере добавляем такую команду:

```
Manager::macro('append', function ($filename, $data) {
    $resource = fopen($filename, 'a');

    fwrite($resource, (string) $data);

    fclose($resource);
});

```

2. Пользуемся

```
\PrettyBx\Support\Facades\FileManager::append($this->getFullPath(), $data);

```

Другие библиотеки в рамках проекта "Pretty Bitrix"
--------------------------------------------------

[](#другие-библиотеки-в-рамках-проекта-pretty-bitrix)

- Удобные фикстуры для юнит тестов:

###  Health Score

31

—

LowBetter than 68% of packages

Maintenance14

Infrequent updates — may be unmaintained

Popularity34

Limited adoption so far

Community16

Small or concentrated contributor base

Maturity49

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 97.2% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~58 days

Total

4

Last Release

2005d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/26834275?v=4)[Artem Prozorov](/maintainers/artem-prozorov)[@artem-prozorov](https://github.com/artem-prozorov)

---

Top Contributors

[![artprozorov](https://avatars.githubusercontent.com/u/188947463?v=4)](https://github.com/artprozorov "artprozorov (69 commits)")[![scrutinizer-auto-fixer](https://avatars.githubusercontent.com/u/6253494?v=4)](https://github.com/scrutinizer-auto-fixer "scrutinizer-auto-fixer (1 commits)")[![Simtel](https://avatars.githubusercontent.com/u/562803?v=4)](https://github.com/Simtel "Simtel (1 commits)")

---

Tags

bitrix

### Embed Badge

![Health badge](/badges/prettybx-support/health.svg)

```
[![Health](https://phpackages.com/badges/prettybx-support/health.svg)](https://phpackages.com/packages/prettybx-support)
```

###  Alternatives

[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)[akaunting/laravel-money

Currency formatting and conversion package for Laravel

7825.3M18](/packages/akaunting-laravel-money)[illuminate/broadcasting

The Illuminate Broadcasting package.

7126.5M178](/packages/illuminate-broadcasting)[flarum/core

Delightfully simple forum software.

211.3M1.9k](/packages/flarum-core)[wearepixel/laravel-cart

A cart implementation for Laravel

1310.5k](/packages/wearepixel-laravel-cart)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
