letsrock / bitrock
Requires
- php: >=7.3.0
- fakerphp/faker: ^1
- illuminate/filesystem: ^8.38
- letsrock/creatable-model: ^1
- letsrock/error-trait: ^1
- letsrock/hlmodel: ^1.1.5
- letsrock/letsenv: ^1
- letsrock/logger: >=1.1
- letsrock/router: 1.2.1
- letsrock/singleton: ^1
- letsrock/view: ^1
- nikic/fast-route: ^1.3
- symfony/http-foundation: 5.3.2
- tightenco/collect: ^8.19
Requires (Dev)
- symfony/var-dumper: ^5.2
This package is not auto-updated.
Last update: 2024-12-11 22:06:32 UTC
README
Подключение к проекту
Для того, чтобы битрок работал на проекте, нужно :
- Создать конфигурационный файл в какой-нибудь папке проекта (/local/.env);
- Установить настройки переменных окружения (их описания смотри в файле .env.example);
- В init.php подгрузить файлы из composer-autoload;
(Далее следует работа с ядром: Bitrock\LetsCore в файле init.php)
- Вызвать статический метод LetsCore::parseConfiguration($envPath), где $envPath - путь до папки с файлом .env, созданного ранее (ИМЕННО ПАПКИ, А НЕ ФАЙЛА);
- Вызвать метод LetsCore::getInstance()->execute(), чтобы ядро подключило сервисы, которые идут вместе с ним (автоматическая генерация моделей при создании и изменении инофблока, например).
- Вызвать метод LetsCore::getInstance()->executeContainer(), чтобы создать сервис-контейнер
Использование собственных классов
Для того, чтобы использовать собственные классы в связке с Bitrock (например, контроллеры, для обработки роутов, или классы, которые будут погружаться в конфиге DI), нужно добавить их в composer-autoload следующим образом
"autoload": { "psr-4": { "*Неймспейс*\\": "директория" } }
Запуск роутера
-
Для запуска роутера нужно установить BOOTSTRAP_MODE в .env в значение, отличное от пустоты [1];
-
Указать путь до файла, на котором будет обрабатываться роутер, относительно корня сайта, BOOTSTRAP_PATH в .env;
2.1. Не забыть создать файл по этому пути (bootstrap.php);
-
Добавить виртуальный путь, на который будут лететь все ajax-запросы в BOOTSTRAP_URL в .env (/ajax-virtual/, по умолчанию);
-
Теперь нужно настроить редирект с BOOTSTRAP_URL на BOOTSTRAP_PATH в настройках сервера:
4.1 пример для Apache: Вместо BOOTSTRAP_URL и BOOTSTRAP_PATH подставить настоящие значения, указанные в .env
!!! Данный блок ставить раньше всех остальных редиректов !!!
<IfModule mod_rewrite.c> RewriteEngine on RewriteBase / RewriteRule ^(.*)BOOTSTRAP_URL(.*)$ BOOTSTRAP_PATH?$1 [QSA,L] </IfModule>
(Далее речь пойдет об абстрактном классе Bitrock\Router\Router) 5. Подключить в BOOTSTRAP_PATH файле загрузку файлов из композера, и распарсить переменные окружения из .env:
#!php
use Bitrock\LetsCore;
require($_SERVER['DOCUMENT_ROOT'] . '/local/vendor/autoload.php');
LetsCore::parseConfiguration($_SERVER['DOCUMENT_ROOT'] . '/local/');
5.1 В данном файле нужно вызвать обработку виртуальных путей роутером (по умолчанию используется Bitrock\Router\FastRouter), но использовать можно любой, отнаследовавшись от Bitrock\Router\Router. Обработку можно запустить при помощи инициализации объекта выбранного роутера, и вызова у него метода handle():
#!php
$router = Bitrcok\Router\FastRouter::getInstance();
// Роуты
...
// подключаем массив с массив с классами для автолода для DI-контейнера:
$definitions = require(массив с классами для автолода);
$router->setContainerDefinitions($definitions);
$router->handle();
- Добавление обрабатываемых роутов (для FastRoute): До запуска метода handle() нужно добавить роуты следующим образом:
#!php
$router->addRoute([
$router::METHOD => [*Массив доступных методов('GET', 'POST')*],
$router::URL => *урл роута(с учетом BOOTSTRAP_URL)*
$router::HANDLER => [*Название класса контроллера*, *название метода, который будет вызван*]
])
Пример:
#!php
$bootstrapPath = Bitrock\LetsCore::getEnv(LetsCore::BOOTSTRAP_URL);
$router->addRoute([
$router::METHOD => ['GET'],
$router::URL => $bootstrapPath . 'test-route/'
$router::HANDLER => [*Bitrock\Controllers\TestController*, 'testMethod']
])
т.о., при попытке кинуть GET аякс запрос на путь /ajax-virtual/test-route/
будет вызван метод testMethod у класса TestController
Автоматическая генерация моделей для инфоблоков Bitrix
Logger
Логгер в пакете реализует psr и использует Monolog под капотом.
Использование:
#!php
use Bitrock\Utils\Logger\Logger;
$logger = Logger::getInstance();
$logger->info(`User with login ${$login} successfully logged in`);
По умолчанию, логи будут записываться в файл, указанный в LOG_PATH в .env файле.
Но есть возможность изменить файл для записи при помощи метода setLogPath()
:
#!php
use Bitrock\Utils\Logger\Logger;
$logger = Logger::getInstance();
$logger->setLogPath(*Путь до лог-файла*);
$logger->info(`User with login ${$login} successfully logged in`);
Resizer Класс ресайзер используется для того, чтобы сократить количество кода при ресайзе картинок.
Достигается это посредством того, что настройки каждого ресайза помещаются в отдельный файл, и не загромождают код, в котором используется ресайз.
Использование:
-
Необходимо в .env указать путь до файла, который возвращает массив с настройками ресайзов (RESIZES_STORAGE_PATH);
-
Создать этот файл с подобным содержимым:
#!php
return [
'FIRST_RESIZE' => [
'WIDTH' => 350,
'HEIGHT' => 350,
'BX_RESIZE' => BX_RESIZE_IMAGE_PROPORTIONAL
]
]
Здесь 'FIRST_RESIZE' - ключ, по которому, в дальнейшем, можно использовать ресайз, а внутри него настройки конкретного ресайза
;
- Использование ресайзера в коде:
#!php
use Bitrock\Utils\Resizer;
$resizer = Resizer::getInstance();
//$resizedPicture = $resizer->getResizeImageArray(*массив файла для ресайза*, *Ключ ресайза из конфига*);
$resizedPicture = $resizer->getResizeImageArray($resizeArray, 'FIRST_RESIZE');
Также, доступен метод getResizeImageArrayById($id, *Ключ ресайза из конфига*)
, который позволяет получить ресайз картинки по ID файла, а не массива с данными файла
BitrockController
Класс Bitrock\Controllers\Controller
структурирует и облегчает работу с AJAX-запросами, если используется какой-либо роутер.
Для того, чтобы использовать возможности контроллера, нужно создать свой контроллер и отнаследовать его от Bitrock\Controllers\Controller
.
Т.о. становятся доступны два метода: json($data = [], $message = '', $status = true, $httpStatus)
и render($viewName, $params = [], $httpStatus)
;
Метод json
:
Метод json возвращает с сервера данные в виде json строки и принимает следующие параметры:
$data
- массив с возвращаемыми данными;$message
- сообщение с ответом от сервера;$status
- статус выполнения скрипта (может быть важно для выполнения действий джаваскриптом);$httpStatus (по умолчанию 200)
- статус ответа от сервера.
метод render возвращает с сервера кусок верстки из вьюшки (обычный php-файл) и принимает следующие параметры:
$viewName
- название файла, верстка которого будет возвращена;$params
- массив с параметрами, которые будут завернуты в переменные и могут быть использованы внутри файла вьюшки, где ключ параметра превратится в название переменной, а значение параметра - в значение этой переменной;$httpStatus (по умолчанию 200)
- статус ответа от сервера.
TODO
- Лог в отдельный файл под каждый сервис
- Кеширование во вьюшке