Через полтора часа стрим!
На этот раз прямо в ютубчик и под пиво.
Присоединяйтесь. Поговорим про RoadRunner.
https://www.youtube.com/live/3WdSCnzsFKE?si=aB3TeAGj_19ixsxK
На этот раз прямо в ютубчик и под пиво.
Присоединяйтесь. Поговорим про RoadRunner.
https://www.youtube.com/live/3WdSCnzsFKE?si=aB3TeAGj_19ixsxK
🔥13💩2
Начинаем спонтанный стримчик
https://youtu.be/TG_XgyKHt10
https://youtu.be/TG_XgyKHt10
YouTube
Разрабатываем Temporal Workflow на PHP для заказа пиццы
Лайвкодим приготовление пиццы на PHP.
В этом видео-цикле рассмотрим написание кода с использованием Temporal на примере пиццерии.
Репозиторий проекта: https://github.com/php-fart/order-pizza
Ссылка на наш дискорд, где мы проводим стримы и где можно с нами…
В этом видео-цикле рассмотрим написание кода с использованием Temporal на примере пиццерии.
Репозиторий проекта: https://github.com/php-fart/order-pizza
Ссылка на наш дискорд, где мы проводим стримы и где можно с нами…
🔥8
#Article #Типизация #php
Всем нравятся Constructor Property Promotion, не так ли?
☝️ эти фрагменты кода эквивалентны 👇
Но не эквивалентны этому:
Разница в наличии значений по умолчанию у свойств.
Теперь попробуем создать объекты из обоих вариантов через рефлексию без использования конструктора.
https://3v4l.org/0tLcM
Если у свойства нет значения по умолчанию, то оно будет неинициализированным.
Такой способ создания объектов в обход конструктора широко используется под капотом многих библиотек, не только тех, которые используют
И иногда это стоит учитывать при работе с классами, которые будут проходить через гидрацию или демаршализацию. У меня такое уже выстреливало 😳.
А если ты счастливый пользователь Cycle ORM, то я рекомендую вообще закрывать конструкторы сущностей (делать пустой приватный конструктор) и вместо этого писать фабрики.
Всем нравятся Constructor Property Promotion, не так ли?
final class Foo {
public function __construct(
public bool $bar = false,
public array $baz = [],
) { }
}
☝️ эти фрагменты кода эквивалентны 👇
final class Foo {
public bool $bar;
public array $baz;
public function __construct(
bool $bar = false,
array $baz = [],
) {
$this->bar = $bar;
$this->baz = $baz;
}
}
Но не эквивалентны этому:
final class Foo {
public bool $bar = false;
public array $baz = [];
public function __construct(
bool $bar = false,
array $baz = [],
) {
$this->bar = $bar;
$this->baz = $baz;
}
}
Разница в наличии значений по умолчанию у свойств.
Теперь попробуем создать объекты из обоих вариантов через рефлексию без использования конструктора.
https://3v4l.org/0tLcM
object(Foo)#3 (0) { ["bar"]=> uninitialized(bool) ["baz"]=> uninitialized(array) }
object(Foo)#3 (2) { ["bar"]=> bool(false) ["baz"]=> array(0) { } }
Если у свойства нет значения по умолчанию, то оно будет неинициализированным.
Такой способ создания объектов в обход конструктора широко используется под капотом многих библиотек, не только тех, которые используют
doctrine/instantiator
.И иногда это стоит учитывать при работе с классами, которые будут проходить через гидрацию или демаршализацию. У меня такое уже выстреливало 😳.
А если ты счастливый пользователь Cycle ORM, то я рекомендую вообще закрывать конструкторы сущностей (делать пустой приватный конструктор) и вместо этого писать фабрики.
🔥9🤔6
#ВредныеСоветы #Типизация #php
Как сломать типизацию:
https://3v4l.org/nTogS
Как сломать
https://3v4l.org/gSWFF
Также не забываем про пакет
Что там ещё нам мешает писать код по своим правилам?
Как сломать типизацию:
https://3v4l.org/nTogS
Как сломать
readonly
(и типизацию):https://3v4l.org/gSWFF
Также не забываем про пакет
unfinalize
.Что там ещё нам мешает писать код по своим правилам?
3v4l.org
Online PHP editor | output for nTogS
Run your php code online; get statistics, vld output and compare output from all versions.
🤯11😁6💩2
Привет, фартаны!
Наконец-то в телегу подвезли подсветку синтаксиса для блоков кода. Естественно, я пройду и обновлю все предыдущие посты.
А чтобы наш канал заиграл новыми красками, нужно его как следует бустануть аж до 5 уровня 🍺🍺🍺🍺🍺
Кстати, а как вы относитесь к сторисам в телеге?
Наконец-то в телегу подвезли подсветку синтаксиса для блоков кода. Естественно, я пройду и обновлю все предыдущие посты.
А чтобы наш канал заиграл новыми красками, нужно его как следует бустануть аж до 5 уровня 🍺🍺🍺🍺🍺
Кстати, а как вы относитесь к сторисам в телеге?
Telegram
PHP Fart Time
Проголосуйте за канал, чтобы он получил больше возможностей.
🔥2🤬2💊2🤔1🤯1
Мы заскедулили стримчик про скедулинг. Приходите и, не отрывая руку от лица, задавайте вопросы.
https://www.youtube.com/live/4VaEy1h3hpo?si=n8cuhWee2qMEq3vx
https://www.youtube.com/live/4VaEy1h3hpo?si=n8cuhWee2qMEq3vx
YouTube
Распределенное планирование Cron заданий: Обзор Temporal Scheduler и сравнение с Laravel
Присоединяйтесь к нам в этом стриме, где мы будем говорить о различных методах планирования заданий, с ориентиром на Laravel и Temporal Scheduler. Вот подробности нашего расписания:
00:00 - Начинаем стрим
00:35 - Вступление
1:25 - Laravel scheduler
16:40…
00:00 - Начинаем стрим
00:35 - Вступление
1:25 - Laravel scheduler
16:40…
🔥12
Тоже накину про инициативу Валентина Удальцова по поводу
Я считаю, что это изменение было бы к лучшему.
Да, это не привычно, да можно сделать статический метод
Но:
- Скорее всего вы сами по-началу плевались на эти скобочки. А кто-то плюётся и сейчас, прыгая между стеками.
- Статические конструкторы - прекрасно, когда есть несколько путей создания объекта (
- Насколько я понимаю, тут нет никакого слома обратной совместимости и всё, что работало, продолжит работать.
Но самый важный для меня поинт — у меня на клавиатуре уже клавиша открывающей скобки начала барахлить. Давайте уже поскорее избавимся от этого скобочного зла 🔥
Если Валентин инициативу дожмёт - будет мега-круто. Я свою не дожал 🫤
Дискуссии:
• PR на GitHub
• Пост в канале Пых
• Пост в канале Предводителев
• Обсуждение в X
new MyClass()->method()
без скобок.Я считаю, что это изменение было бы к лучшему.
Да, это не привычно, да можно сделать статический метод
MyClass::new()
, который потом приятно выглядит в fluent вызовах MyClass::new()->method()
.Но:
- Скорее всего вы сами по-началу плевались на эти скобочки. А кто-то плюётся и сейчас, прыгая между стеками.
- Статические конструкторы - прекрасно, когда есть несколько путей создания объекта (
fromFile(File $file)
, fromString(string $data)
). Но когда мы описываем класс DTO, то на кой нам эти статические конструкторы? DTOшек много. А ещё на каждый статический конструктор придётся дублировать параметры с конструктора вместе с их описанием!- Насколько я понимаю, тут нет никакого слома обратной совместимости и всё, что работало, продолжит работать.
Но самый важный для меня поинт — у меня на клавиатуре уже клавиша открывающей скобки начала барахлить. Давайте уже поскорее избавимся от этого скобочного зла 🔥
Если Валентин инициативу дожмёт - будет мега-круто. Я свою не дожал 🫤
Дискуссии:
• PR на GitHub
• Пост в канале Пых
• Пост в канале Предводителев
• Обсуждение в X
GitHub
new MyClass()->method() without parentheses by vudaltsov · Pull Request #13029 · php/php-src
This PR allows to immediately access newly created object without parentheses.
class Request implements Psr\Http\Message\RequestInterface
{
// ...
}
// BEFORE
$request = (new Request())-&g...
class Request implements Psr\Http\Message\RequestInterface
{
// ...
}
// BEFORE
$request = (new Request())-&g...
🔥14💊1
Записали стрим по атрибутам.
Мы их используем давно и везде - во фреймворке, в пет-проектах и на продуктах. А вы?
Из того, что забыли сказать:
1. Есть пакет
2. С наступающим Новым Годом!
Мы их используем давно и везде - во фреймворке, в пет-проектах и на продуктах. А вы?
Из того, что забыли сказать:
1. Есть пакет
spiral/attributes
, который раньше использовался для чтения атрибутов и аннотаций через единый интерфейс. Раньше он был очень актуален, а в версии пакета 2.х парсинг атрибутов работал даже на PHP 7.4 (хотя атрибуты появились только в PHP 8). spiral/attributes
был хорошим помощником в переходный период с аннотаций на атрибуты, но сейчас, с отказом от аннотаций, он становится немного неактуальным и требует пересмотра концепции. Поэтому, отвечая на запрос втора канала Хэндлим тему, говорю, что производить сравнения spiral/attributes
с либами типа этой было бы некорректно — слишком уж разные.2. С наступающим Новым Годом!
YouTube
Глубокое погружение в PHP Attributes: Все, что нужно знать
🔥 Присоединяйтесь к нашему стриму, где мы освещаем все аспекты PHP Attributes! Разберем от базового использования до продвинутых техник в реальных приложениях.
00:00 - Начинаем стрим
00:25 - Приветствие
02:10 - Вступление
05:00 - Как выглядят атрибуты
06:50…
00:00 - Начинаем стрим
00:25 - Приветствие
02:10 - Вступление
05:00 - Как выглядят атрибуты
06:50…
🔥11
Привет, фартаны!
Закончился 2023 год, начался 2024.
Пришла пора оглянуться назад и посмотреть на проделанную работу, а заодно расставить таймкоды.
📽 Все про PHP attributes
📽 Distributed Cron scheduling
📽 Создаем простой чат с использованием Spiral Framework, RoadRunner и Centrifugo WS сервер и VueJs
📽 Что такое RoadRunner app server и для чего он нужен PHP
📽 Как работать с gRPC в PHP
📽 Пишем простой Temporal workflow
С Новым Годом! Говорят, он будет хуже, чем предыдущие, но последним (правда не говорят, в каком смысле).
Пишите в комментариях, что бы вы хотели увидеть в следующем стриме.
Закончился 2023 год, начался 2024.
Пришла пора оглянуться назад и посмотреть на проделанную работу, а заодно расставить таймкоды.
📽 Все про PHP attributes
📽 Distributed Cron scheduling
📽 Создаем простой чат с использованием Spiral Framework, RoadRunner и Centrifugo WS сервер и VueJs
📽 Что такое RoadRunner app server и для чего он нужен PHP
📽 Как работать с gRPC в PHP
📽 Пишем простой Temporal workflow
С Новым Годом! Говорят, он будет хуже, чем предыдущие, но последним (правда не говорят, в каком смысле).
Пишите в комментариях, что бы вы хотели увидеть в следующем стриме.
🔥18🤔3💊3
Привет, фартаны!
Вот и подведён итог 2023 года в PHP RU сообществе.
Что тут сказать? Такой сокрушительной победы мы и не ожидали! Спасибо за поддержку и внимание 🥳
https://t.me/tg_5minphp/1299
Вот и подведён итог 2023 года в PHP RU сообществе.
Что тут сказать? Такой сокрушительной победы мы и не ожидали! Спасибо за поддержку и внимание 🥳
https://t.me/tg_5minphp/1299
🔥22😁1
Пинг.
Скоро выйдет Temporal PHP SDK с новой крутой фичей - Workflow Update. К релизу стоит задача не только завершить код в SDK и доку, но и подготовить примеры.
А ещё я купил себе новую клаву, чтобы не добивать родную у ноутбука. Keychron K2 в очень классной комплектации. Это механика с блютузом и подсветкой, достаточно тихая, приятная в работе и тяжёлая (а значит надёжная).
При этом, я думаю, многим из вас нравятся настолки в той или иной мере. Кости в ведьмаке тоже считаются.
В общем, пора кодить. Задача - сделать игру Zonk на Temporal с использованием новой фичи Workflow Update.
👇👇👇
Go live!
Скоро выйдет Temporal PHP SDK с новой крутой фичей - Workflow Update. К релизу стоит задача не только завершить код в SDK и доку, но и подготовить примеры.
А ещё я купил себе новую клаву, чтобы не добивать родную у ноутбука. Keychron K2 в очень классной комплектации. Это механика с блютузом и подсветкой, достаточно тихая, приятная в работе и тяжёлая (а значит надёжная).
При этом, я думаю, многим из вас нравятся настолки в той или иной мере. Кости в ведьмаке тоже считаются.
В общем, пора кодить. Задача - сделать игру Zonk на Temporal с использованием новой фичи Workflow Update.
👇👇👇
Go live!
🔥21
Привет, Это FartTimer!
📺 У нас опубликован новое видео.
Это запись спонтанного стрима на твиче. Этакий концентрат информации про Temporal, RoadRunner, интерцепторы и что-то там ещё на 4 часа.
https://youtu.be/AIwZAXXcYEY?si=h-U1qfP0SJSTPWPw
📺 У нас опубликован новое видео.
Это запись спонтанного стрима на твиче. Этакий концентрат информации про Temporal, RoadRunner, интерцепторы и что-то там ещё на 4 часа.
https://youtu.be/AIwZAXXcYEY?si=h-U1qfP0SJSTPWPw
YouTube
Про Temporal, RoadRunner, Buggregator, Centrifugo, Spiral и др. [ЗАПИСЬ СТРИМА]
Exploring Temporal, RoadRunner, Buggregator, Centrifugo, Spiral and More [STREAM RECORDING]
Tune in for an in-depth exploration of cutting-edge development technologies like Temporal, RoadRunner, Buggregator, Centrifugo, and Spiral. This recorded stream…
Tune in for an in-depth exploration of cutting-edge development technologies like Temporal, RoadRunner, Buggregator, Centrifugo, and Spiral. This recorded stream…
🔥15
🪼 А чтобы не приходилось скучать в ожидании нового видео, напоминаю, что скоро будет проходить проплывать Podlodka PHP. Погружение на тему "Работа с базой данных".
Подробнее о конференции тут https://podlodka.io/phpcrew
Скоро разыграем одну подарочную проходку, когда придумаем конкурс. Может у вас есть идеи?
Увидимся на подлодке🫡
Подробнее о конференции тут https://podlodka.io/phpcrew
Скоро разыграем одну подарочную проходку, когда придумаем конкурс. Может у вас есть идеи?
Увидимся на подлодке
Please open Telegram to view this post
VIEW IN TELEGRAM
🎟Розыгрыш билета на подлодку
Закидывайте в этот тред мемы про Buggregator, Temporal, RoadRunner, Spiral, Bitrix, Wordpress, релиз Yii3, Валентина и трейты, PHP, пыхо-тренды и всё остальное на тему PHP.
Автор, субъективно набравший меньше 💩 или больше позитивных реакций, получит приглашение на подлодку.
⚠️ *Важно: авторские мемы участвуют в розыгрыше, а честно перепощенные просто приветствуются.*
Автор лучшего перепощенного мема получит лицензию на Buggregator.
Закидывайте в этот тред мемы про Buggregator, Temporal, RoadRunner, Spiral, Bitrix, Wordpress, релиз Yii3, Валентина и трейты, PHP, пыхо-тренды и всё остальное на тему PHP.
Автор, субъективно набравший меньше 💩 или больше позитивных реакций, получит приглашение на подлодку.
⚠️ *Важно: авторские мемы участвуют в розыгрыше, а честно перепощенные просто приветствуются.*
Автор лучшего перепощенного мема получит лицензию на Buggregator.
🔥8
Подводим итоги конкурса из поста выше
Лучший мем: https://t.me/php_fart/61?comment=325
Автор мема заслуженно получает промокод на подлодку: (вводить после нажатия кнопки КУПИТЬ )
Поздравляем победителя! 🎉🎉🎉
🍾🍾 Второе место вычислить нереально, поэтому лицензию на багри получают все 🍾🍾
Забрать можно в этом репозитории https://github.com/buggregator/server или через докер (Документация)
Или через композер
Лучший мем: https://t.me/php_fart/61?comment=325
Автор мема заслуженно получает промокод на подлодку:
01000110010000010101001001010100
Поздравляем победителя! 🎉🎉🎉
🍾🍾 Второе место вычислить нереально, поэтому лицензию на багри получают все 🍾🍾
Забрать можно в этом репозитории https://github.com/buggregator/server или через докер (Документация)
docker run --rm --pull always -p 127.0.0.1:8000:8000 -p 127.0.0.1:1025:1025 -p 127.0.0.1:9912:9912 -p 127.0.0.1:9913:9913 ghcr.io/buggregator/server:latest
Или через композер
composer req --dev buggregator/trap
Telegram
... in PHP Fart Time Chat
В блоге Виктора (который из Yii 3 Core) вышла позитивная заметка про Buggregator.
Получать обратную связь — хорошо. А получать хорошую обратную связь — ещё лучше.
Вы используете Buggregator? Поделитесь в комментариях обратной связью 💖
Напишите, как используете, чего не хватает, на что сделать упор.
Хотели бы, чтобы мы писали здесь о багри больше (не маркетинговый буллшит, а про фичи, кейсы, размышления и прочее)? — если да — ставьте🖼️
Получать обратную связь — хорошо. А получать хорошую обратную связь — ещё лучше.
Вы используете Buggregator? Поделитесь в комментариях обратной связью 💖
Напишите, как используете, чего не хватает, на что сделать упор.
Хотели бы, чтобы мы писали здесь о багри больше (не маркетинговый буллшит, а про фичи, кейсы, размышления и прочее)? — если да — ставьте
Please open Telegram to view this post
VIEW IN TELEGRAM
Telegram
Viktorprogger
Профайлинг с XHProf | #development #php #profiling #xhprof
Некоторое время назад я сравнивал различные профайлеры: надо посмотреть, что сколько времени кушает именно на проде. Остановился на XHProf по нескольким причинам: это бесплатное self hosted решение…
Некоторое время назад я сравнивал различные профайлеры: надо посмотреть, что сколько времени кушает именно на проде. Остановился на XHProf по нескольким причинам: это бесплатное self hosted решение…
Мы выяснили, что вам, уважаемые фартаны, интересно почитать про #Buggregator. Ну что-ж, начнём со знакомства.
🪲 Buggregator — вспомогательный инструмент для отладки. Он не призван заменить xDebug, а наоборот - усилить. Из названия понятно, что он агрегирует баги, а точнее дампы. Что пошлёте — то и сагрегирует.
Сейчас поддерживаются:
- Логи из Monolog
- События и отчёты Sentry
- Профили XHProf (рисует граф и флейм-граф)
- Дампы из Symfony var-dumper и Spatie Ray
- Mail (есть встроенный SMTP сервер)
- Виджеты Inspector dev
🎁 В линейке Buggregator несколько продуктов.
Основной продукт, который мы подразумеваем под названием Buggregator — серверное решение, готовое интегрироваться в вашу инфраструктуру наравне с другими сервисами. Запускается и работает под докером.
Это Production-Ready решение, которое можно спрятать за авторизацией (доступна интеграция с SSO с настраиваемыми скоупами) и подключить к своей базе данных (сейчас доступны MongoDB и Postgres. Хотите MySQL? Добавим!)
😸 Начните локальное использование под докером, запустив команду:
Каждый порт соответствует своему протоколу. Просто настройте ваш сервис на использование этих портов:
- 8000: HTTP Dumps, Sentry, Ray, Inspector, XHProf.
- 1025: SMTP.
- 9912: Symfony Var-Dumper.
- 9913: Monolog.
Полная документация: docs.buggregator.dev
🔨 Разработка Buggregator ведётся в нескольких репозиториях:
- buggregator/server — бэкенд на Spiral и RoadRunner.
- buggregator/frontend — фронтенд на Vuejs 3 и TailwindCSS с использованием StoryBook.
- buggregator/docs — документация
⭐️ Мы будем очень рады, если вы поддержите нас звёздочкой на гитхабе и поучаствуете в развитии проекта своими идеями, багрепортами, контрибьютингом или просто расскажете о Buggregator своему коту.
Сейчас поддерживаются:
- Логи из Monolog
- События и отчёты Sentry
- Профили XHProf (рисует граф и флейм-граф)
- Дампы из Symfony var-dumper и Spatie Ray
- Mail (есть встроенный SMTP сервер)
- Виджеты Inspector dev
🎁 В линейке Buggregator несколько продуктов.
Основной продукт, который мы подразумеваем под названием Buggregator — серверное решение, готовое интегрироваться в вашу инфраструктуру наравне с другими сервисами. Запускается и работает под докером.
Это Production-Ready решение, которое можно спрятать за авторизацией (доступна интеграция с SSO с настраиваемыми скоупами) и подключить к своей базе данных (сейчас доступны MongoDB и Postgres. Хотите MySQL? Добавим!)
😸 Начните локальное использование под докером, запустив команду:
docker run --rm --pull always -p 127.0.0.1:8000:8000 -p 127.0.0.1:1025:1025 -p 127.0.0.1:9912:9912 -p 127.0.0.1:9913:9913 ghcr.io/buggregator/server:latest
Каждый порт соответствует своему протоколу. Просто настройте ваш сервис на использование этих портов:
- 8000: HTTP Dumps, Sentry, Ray, Inspector, XHProf.
- 1025: SMTP.
- 9912: Symfony Var-Dumper.
- 9913: Monolog.
Полная документация: docs.buggregator.dev
🔨 Разработка Buggregator ведётся в нескольких репозиториях:
- buggregator/server — бэкенд на Spiral и RoadRunner.
- buggregator/frontend — фронтенд на Vuejs 3 и TailwindCSS с использованием StoryBook.
- buggregator/docs — документация
⭐️ Мы будем очень рады, если вы поддержите нас звёздочкой на гитхабе и поучаствуете в развитии проекта своими идеями, багрепортами, контрибьютингом или просто расскажете о Buggregator своему коту.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥16 12💊2
Продолжаем знакомство с миром #Buggregator
💾 Trap
Рабочее название в первые дни — "Buggregator Client". Задумывался как прокси вар-дампов на Buggregator Cloud, но быстро оброс фичами и новым смыслом.
Теперь Trap — это:
- Миниатюрный сервер Buggregator, не требующий Docker для работы. Написан на файберах PHP 8.1. Раньше выводил дампы, логи, HTTP и прочие события только в консоль. Сейчас поддерживается такой же WEB интерфейс, как у старшего брата.
- Набор патчей для Symfony VarDumper. Наличие установленного Trap в вашем проекте улучшит то, как VarDumper отрисовывает Protobuf объекты.
- Набор хелперов. В Trap есть функция
Установка:
🪲 Trap сервер
Запускается из вендора:
Флаг --ui необходим для включения веб-морды на 8000 порту. Сейчас эта функция в бета-режиме.
По умолчанию Trap слушает только один порт
Trap можно запустить на тех же портах, что и основной Buggregator:
(стоит ли сделать этот список портов по умолчанию?)
Trap годится только для локального использования: тут нет SSO, а из "внешних БД", возможно, будет только SQLite, просто чтобы не хранить события в массивах 🙂
Но есть и эксклюзивные фичи:
- благодаря "локальности", Trap может находить файлы профилировщиков, если таковые были сконфигурированы в
- низкоуровневая работа с трафиком позволяет реализовать абсолютно любой протокол. Даже просто вывести сырые бинарные данные, как отдельное событие, чего-то да стоит!
🚀 Хэлперы trap()
Функция
- При вызове сразу настраиваются умолчания для отправки симфоневых дампов на локальный сервер (
-
-
- а ещё (субъективно)
🪄 Подводя итог
Trap как сервер — хорошая альтернатива, когда не хочется запускать докер а PHP установлен локально.
Trap как PHP helper — необходим, если работаете с Protobuf и gRPC. Может быть удобнее
⭐️ Также будем очень рады звёздочкам на гитхабе и контрибьюторской поддержке.
Рабочее название в первые дни — "Buggregator Client". Задумывался как прокси вар-дампов на Buggregator Cloud, но быстро оброс фичами и новым смыслом.
Теперь Trap — это:
- Миниатюрный сервер Buggregator, не требующий Docker для работы. Написан на файберах PHP 8.1. Раньше выводил дампы, логи, HTTP и прочие события только в консоль. Сейчас поддерживается такой же WEB интерфейс, как у старшего брата.
- Набор патчей для Symfony VarDumper. Наличие установленного Trap в вашем проекте улучшит то, как VarDumper отрисовывает Protobuf объекты.
- Набор хелперов. В Trap есть функция
trap()
. Это тот же Symfony dump()
, но с некоторыми изменениями. Установка:
composer require --dev buggregator/trap -W
🪲 Trap сервер
Запускается из вендора:
./vendor/bin/trap --ui
Флаг --ui необходим для включения веб-морды на 8000 порту. Сейчас эта функция в бета-режиме.
По умолчанию Trap слушает только один порт
9912
, но туда можно слать всё: и дампы, и логи, и http, переходящий в WebSocket. Мы написали инспектор траффика, который сам определяет протокол и направляет данные в нужный обработчик.Trap можно запустить на тех же портах, что и основной Buggregator:
vendor/bin/trap -p1025 -p9912 -p9913 -p8000
(стоит ли сделать этот список портов по умолчанию?)
Trap годится только для локального использования: тут нет SSO, а из "внешних БД", возможно, будет только SQLite, просто чтобы не хранить события в массивах 🙂
Но есть и эксклюзивные фичи:
- благодаря "локальности", Trap может находить файлы профилировщиков, если таковые были сконфигурированы в
php.ini
.- низкоуровневая работа с трафиком позволяет реализовать абсолютно любой протокол. Даже просто вывести сырые бинарные данные, как отдельное событие, чего-то да стоит!
🚀 Хэлперы trap()
Функция
trap()
немного отличается от dump()
:- При вызове сразу настраиваются умолчания для отправки симфоневых дампов на локальный сервер (
127.0.0.1:9912
), так что не надо лезть в .env
.-
trap()
имеет текучий интерфейс (fluent interface), а значит можно делать так:trap(FOO: $foo, BAR: $bar) // Дампаем переменные с указанием имен
->stackTrace() // Добавить красивый Stack Trace
->once() // Сработает один раз. Удобно использовать в циклах.
->if($foo instanceof FooInterface) // Условие отправки; можно функцией
->return(); // $foo вернётся как результат
-
trap()::profile()->...
в планах добавить удобства для профилирования- а ещё (субъективно)
trap
набирать и произносить удобнее, чем dump
. Так что хватит дампать, го трапать!🪄 Подводя итог
Trap как сервер — хорошая альтернатива, когда не хочется запускать докер а PHP установлен локально.
Trap как PHP helper — необходим, если работаете с Protobuf и gRPC. Может быть удобнее
dump()
. Перспективен.⭐️ Также будем очень рады звёздочкам на гитхабе и контрибьюторской поддержке.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - buggregator/trap: A local debug server and utilities set for PHP projects
A local debug server and utilities set for PHP projects - buggregator/trap