Загрузка собственных классов в Битрикс

1С Битрикс Управления сайтом довольно мощная и гибкая CMS позволяющая решать множество задач веб-разработки. В ней так же предусмотрены механизмы расширения базовых возможностей системы по средством собственных компонентов, модулей и классов. Давайте рассмотрим последние и разберёмся как же загружать их в систему. Существует 3 основных варианта подключения своего класса:
  1. Через модули методом AddAutoloadClasses()
  2. Через автозагрузчик классов методом registerAutoLoadClasses()
  3. По средствам Composer

Загрузка классов через модули методом AddAutoloadClasses().

Первым делом необходимо расположить класс в удобном для этого месте, где его не затрут обновления системы и с ним будет удобно работать. Обычно я размещаю классы в папке /local/php_interface/lib/папка с типом класса/.

В нашем случае папка с типом класса это директория собирающая однотипные классы с собственными пользовательскими свойствами, для простоты пока опустим эту папку и поместим прямо в корень /lib/, назовём файл SomeClass.php:

// local/php_interface/lib/SomeClass.ph
<?
namespace lib;

class SomeClass
{
    public static function hello()
    {
        echo "Hello!";
    }
}

Код добавления класса прописывается в файл init.php:

// init.php
<?
CModule::AddAutoloadClasses(
    '', // не указываем имя модуля
    array(
        // ключ - имя класса с пространством имен, значение - путь относительно корня сайта к файлу
        'lib\SomeClass' => '/local/php_interface/lib/SomeClass.php',
    )
);

Таким образом, как только нам потребуется воспользоваться нашим классом, система автоматически его подгрузит:

// test.php
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

$someclass = new lib\SomeClass();
$someclass->hello();

Загрузка классов через автозагрузчик классов методом registerAutoLoadClasses()

Первым делом необходимо расположить класс в удобном для этого месте, где его не затрут обновления системы и с ним будет удобно работать. Обычно я размещаю классы в папке /local/php_interface/lib/папка с типом класса/.

В нашем случае папка с типом класса это директория собирающая однотипные классы с собственными пользовательскими свойствами, для простоты пока опустим эту папку и поместим прямо в корень /lib/, назовём файл SomeClass.php:

// /local/php_interface/lib/SomeClass.php
<?
namespace lib;

class SomeClass
{
    public static function hello()
    {
        echo "Hello!";
    }
}

Теперь в папке /local/php_interface/ создадим файл autoload.php где вызовем метод Bitrix\Main\Loader::registerAutoLoadClasses() вот с такими настройками:

// local/php_interface/autoload.php
<?
Bitrix\Main\Loader::registerAutoLoadClasses(null, [
    // ключ - имя класса с простанством имен, значение - путь относительно корня сайта к файлу
    'lib\SomeClass' => '/local/php_interface/lib/SomeClass.php'
]);

Сам файл необходимо подключить в init.php в самом начале:

// init.php
if (file_exists($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/autoload.php"))
   require_once($_SERVER["DOCUMENT_ROOT"]."/local/php_interface/autoload.php");

Таким образом, как только нам потребуется воспользоваться нашим классом, система автоматически его подгрузит:

// test.php
<?
require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php");

$someclass = new lib\SomeClass();
$someclass->hello();

Загрузка классов через Composer

Для автозагрузки классов Битрикс, можно использовать популярный менеджер зависимостей Composer. Он сам создаст файл autoload.php который будет отвечать за автозагрузку наших классов. Чтобы использовать Composer вам необходимо в папке /local/php_interface/ создать файл composer.json со следующим содержимым:

// local/php_interface/composer.json
{
    "autoload": {
        "psr-4": {
        "lib\\": "lib/"
        }
    }
}

Первый lib\\ это пространство имён наших классов, а второй lib/ это папка относительно директории где создан conposer.json, где будут лежать наши классы. Затем открываем консоль, переходим в папку /local/php_interface/ и запускаем команду composer install. Если всё сделано правильно и у вас установлен Composer вы увидите следующее сообщение:

Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating autoload files

Composer создаст новую папку /vendor/ и файл autoload.php, который нам осталось загрузить в init.php как мы делали в первом методе:

// init.php
<? 
require_once ( $_SERVER['DOCUMENT_ROOT'] . '/local/php_interface/vendor/autoload.php' );


Загрузка комментариев...