Загрузка собственных классов
1С Битрикс Управления сайтом довольно мощная и гибкая CMS позволяющая решать множество задач веб-разработки. В ней так же предусмотрены механизмы расширения базовых возможностей системы по средством собвтенных компонентов, модулей и классов. Давайте рассмотрим последние и разберёмся как же загружать их в систему. Существует 3 основных варианта подключения своего класса:
- Через модули методом
AddAutoloadClasses()
- Через автозагрузчик классов методом
registerAutoLoadClasses()
- По средствам
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.ph<?
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<?
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' );