Экспериментальное решение частной задачи - прикручивание, взятого за основу WebProfilerBundle к кастомным вариантам Битрикс + Symfony (или Wordpress + Symfony)
INTERNAL
В процессе разработки.
Composer 2.0:
composer require proklung/web-profilier-bundle
Composer 1.0:
composer.json:
"repositories": [
{
"type": "git",
"url": "https://github.com/proklung/web-profilier-bundle"
}
]
Файл custom-web-profiler.yaml
в /local/config/packages
custom-web-profiler:
enabled: true
profiler_cache_path: '%kernel.cache_dir%/profiler.json'
# Дополнительный путь к твиговским шаблонам профайлера и коллекторов
profiler_twig_templates_path:
- '%kernel.project_dir%/twig/view'
# Игнорируемые url (частичное совпадение)
ignoring_url:
- '/bitrix/admin'
- 'public_session.php'
- '/bitrix/urlrewrite.php'
- '/_profiler'
# Отключение некоторых профайлеров из стандартного набора по коду. Если false, то будет отрублен.
# По умолчанию они все включены.
profilers:
json_response: false
Работает только, если пользователь залогинен админом. Не рекомендуется использовать на проде.
При включении бандла в standalone_bundles.php
появляется страница /_profiler/
, где выводятся данные о происходящем
в текущей сессии.
Если бандл не установлен, то профайлер находится по адресу
/bitrix/admin/_profiler.php
(при инициализации будет единожды скопирован туда).
В админке появляются две кнопки на административной панели (открывать в новом окне):
- Профайлер текущего запроса - ссылка на профайлер с данными на текущую открытую страницу.
- Профайлер последнего запроса - ссылка на профайлер с данными на последний запрос. Отличие от первой кнопки в том, что можно сделать в другой вкладке открыть страницу, возвращающую, скажем json, и посмотреть ее профайл.
Чтобы отслеживать роуты Symfony роутер должен соблюсти два условия:
-
После обработки роута, но до определения, что это роут нативный или симфонический, нужно запустить кастомное событие
kernel.after_handle_request
, передав ему в качестве параметра класс, отнаследованный отSymfony\Contracts\EventDispatcher\Event
и реализущий два метода -getRequest
иgetResponse
. -
Перед выходом из скрипта, после обработки симфонического роутера должно инициироваться битриксовое событие
OnAfterEpilog
, где в качестве параметров передаетсяresponse
иrequest
.
В моем изыскательном бандле все это поддерживается.
- Не перехватываются профайлером данные, выплевываемые в браузер "диким" способом. Типа:
$data = ['success' => true]
echo json_encode($data);