Вышел Laravel 12.51.0
Привет, Laravel-разработчики! Только что вышел новый минорный релиз — Laravel 12.51.0. Несмотря на номер, здесь собралось множество полезных и долгожданных фич, а также важные исправления для повседневной работы. Вот на что стоит обратить внимание.
🚀 Что нового и полезного
🔹 Умная валидация с
Теперь с валидатором можно работать еще изящнее. Добавили два новых метода, которые запускают код только при определенном исходе проверки. Это гораздо чище, чем старые
🔹 Гибкие значения в firstOrCreate (#58639)
Классная фишка! Методы
🔹 Событие отмены пакетных заданий
Для тех, кто активно работает с пакетными заданиями в очередях, добавили специальное событие
🔹 Код после отправки уведомления (afterSending) (#58654)
Уведомления обзавелись методом
🔹 Таймаут для запросов MySQL (#58644)
Прямо в Query Builder для MySQL добавили метод
🔹 Сортировка сводной таблицы по убыванию (#58720)
В отношениях «многие-ко-многим» давно был
🛠 Важные исправления
🔹 Очереди: Исправлена критическая ошибка в подсчете заданий внутри пакета (Batch), когда используется опция
🔹 PostgreSQL: Поправили определение начального значения для sequence (автоинкремента), если вы используете нестандартные схемы или названия соединений (#58199). Баг мог приводить к конфликтам первичных ключей.
🔹 Строки: Метод
⚙️ Улучшения под капотом и для разработчика
🔹 Тестирование стало лучше: Для фейковых пакетов заданий добавили метод
🔹 Безопасность и инфраструктура: Добавили поддержку SSL-сертификатов при дампе и загрузке схемы базы данных MySQL через Artisan-команды (#58690).
🔹 Типы и IDE: Очередная порция улучшений аннотаций PHPDoc и исправлений типов по всей кодовой базе. Особенно много правок в хелперах, валидации и HTTP-клиенте. Ваша IDE будет больше понимать и меньше ругаться.
🔹 Уведомление об устаревании: Методу
💎 Что в итоге?
Laravel 12.51.0 — это тот случай, когда минорный релиз приносит мажорное удовольствие. Новые методы для валидатора и уведомлений решают реальные боли, а исправления в очередях и PostgreSQL — закрывают важные грабли. Если вы на 12.x ветке — обновляйтесь смело, благо
Полный список всех коммитов в официальном changelog: https://github.com/laravel/framework/releases/tag/v12.51.0
📱 @dev_notes_ru
#Laravel #Laravel12 #PHP #Backend
Привет, Laravel-разработчики! Только что вышел новый минорный релиз — Laravel 12.51.0. Несмотря на номер, здесь собралось множество полезных и долгожданных фич, а также важные исправления для повседневной работы. Вот на что стоит обратить внимание.
🔹 Умная валидация с
whenFails() и whenPasses() (#58655)Теперь с валидатором можно работать еще изящнее. Добавили два новых метода, которые запускают код только при определенном исходе проверки. Это гораздо чище, чем старые
if-else блоки после $validator->fails().🔹 Гибкие значения в firstOrCreate (#58639)
Классная фишка! Методы
firstOrCreate и createOrFirst теперь наконец-то поддерживают замыкания для значений. Это решает давнюю проблему, когда нужно было динамически вычислить значение для создания, но нельзя было передать функцию.🔹 Событие отмены пакетных заданий
BatchCancelled (#58627)Для тех, кто активно работает с пакетными заданиями в очередях, добавили специальное событие
BatchCancelled. Теперь вы можете легко отследить и отреагировать, когда пользователь (или система) отменил выполнение целого пакета задач.🔹 Код после отправки уведомления (afterSending) (#58654)
Уведомления обзавелись методом
afterSending(). Хотите логировать факт отправки, обновлять статус в БД или запускать следующую задачу только после того, как письмо улетело? Теперь это делается в пару строчек прямо в классе нотификации.🔹 Таймаут для запросов MySQL (#58644)
Прямо в Query Builder для MySQL добавили метод
timeout(). Теперь не нужно лезть в глубокую конфигурацию соединения, чтобы задать лимит выполнения для одного конкретного тяжелого запроса. Удобно для оптимизации.🔹 Сортировка сводной таблицы по убыванию (#58720)
В отношениях «многие-ко-многим» давно был
orderByPivot(). Теперь добавили и orderByPivotDesc() для полного счастья и читаемости кода.🛠 Важные исправления
🔹 Очереди: Исправлена критическая ошибка в подсчете заданий внутри пакета (Batch), когда используется опция
deleteWhenMissingModels (#58541). Также пофиксили работу Queue::fake() — теперь он корректно сбрасывает блокировки уникальных заданий между тестами (#58718), что могло приводить к ложным успехам в тестах.🔹 PostgreSQL: Поправили определение начального значения для sequence (автоинкремента), если вы используете нестандартные схемы или названия соединений (#58199). Баг мог приводить к конфликтам первичных ключей.
🔹 Строки: Метод
Str::isUrl() больше не будет выдавать ложный сигнал об ошибке на однобуквенных доменах (#58686). А Str::substrReplace() теперь правильно работает с отрицательными значениями offset и length в крайних случаях (#58634).🔹 Тестирование стало лучше: Для фейковых пакетов заданий добавили метод
assertJobs() (#58606). А Bus::assertBatched() теперь можно вызывать, передавая массив для проверки (#58659). Еще добавили изоляцию префиксов кеша для параллельного тестирования, чтобы тесты не мешали друг другу (#58691).🔹 Безопасность и инфраструктура: Добавили поддержку SSL-сертификатов при дампе и загрузке схемы базы данных MySQL через Artisan-команды (#58690).
🔹 Типы и IDE: Очередная порция улучшений аннотаций PHPDoc и исправлений типов по всей кодовой базе. Особенно много правок в хелперах, валидации и HTTP-клиенте. Ваша IDE будет больше понимать и меньше ругаться.
🔹 Уведомление об устаревании: Методу
Request::get() официально добавили пометку @deprecated (#58635). Пора переходить на использование свойства запроса (например, $request->name) или метода input().Laravel 12.51.0 — это тот случай, когда минорный релиз приносит мажорное удовольствие. Новые методы для валидатора и уведомлений решают реальные боли, а исправления в очередях и PostgreSQL — закрывают важные грабли. Если вы на 12.x ветке — обновляйтесь смело, благо
composer update сделает всё быстро.Полный список всех коммитов в официальном changelog: https://github.com/laravel/framework/releases/tag/v12.51.0
#Laravel #Laravel12 #PHP #Backend
Please open Telegram to view this post
VIEW IN TELEGRAM
Явное управление ресурсами в JavaScript
Статья полностью переработана. Добавлены
Спецификация Explicit Resource Management (Stage 3) вводит единый языковой контракт освобождения ресурсов. Объекты с
В материале:
— Синтаксис и семантика
— Интеграция с существующими API: отмена
— Полифилл и требования к окружению.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #TypeScript #NodeJS
Статья полностью переработана. Добавлены
DisposableStack и AsyncDisposableStack, примеры с fetch и navigator.locks, актуальный статус поддержки.Спецификация Explicit Resource Management (Stage 3) вводит единый языковой контракт освобождения ресурсов. Объекты с
Symbol.dispose / Symbol.asyncDispose используются через using и await using — очистка происходит автоматически при выходе из области видимости.В материале:
— Синтаксис и семантика
using, await using, DisposableStack.— Интеграция с существующими API: отмена
fetch, управление navigator.locks.— Полифилл и требования к окружению.
#JavaScript #TypeScript #NodeJS
Please open Telegram to view this post
VIEW IN TELEGRAM
Релиз PHP 8.5.3
Команда разработчиков PHP объявила о выходе PHP 8.5.3. Это релиз, направленный на исправление ошибок.
🚀 Всем пользователям PHP 8.5 настоятельно рекомендуется обновиться до данной версии.
📌 Что исправлено:
Ядро (Core):
• Исправлена совместимость preserve_none с LTO (GH-20806)
• Сборка на macOS с musttail/preserve_none больше не падает (GH-20767)
• Устранён NULL dereference при вызове ob_start() в shutdown-функции (GH-20837)
• Бесконечный цикл в GC-деструкторе Fiber (OSS-Fuzz #471533782)
• Сломавшаяся оптимизация block_pass JMP[N]Z (OSS-Fuzz #472563272)
• Внутренние enum'ы больше нельзя клонировать и сравнивать (GH-20914)
• Утечка значения по умолчанию унаследованного свойства (OSS-Fuzz #474613951)
• ReflectionProperty теперь корректно возвращает PHPDoc при наличии атрибута с Closure (GH-20895)
• Use-after-free в FE_FREE при взаимодействии с GC (GH-20766)
• Исправлена by-ref запись в неинициализированное hooked-свойство (OSS-Fuzz #471486164)
• Устранён UAF во вложенных finally с повторной проверкой типа (OSS-Fuzz #438780145)
• Баг с __clone у ленивых прокси (GH-20905)
• Переполнение hooked-свойств объектов (GH-20479)
Date:
• Обновление timelib до версии 2022.16
DOM:
• Dom\HTMLDocument больше не ломает закрывающие теги внутри script (GH-21041)
MbString:
• Деление на ноль в mb_str_pad() при некорректной кодировке строки-заполнителя (GH-20833)
• Переполнение стека в mb_convert_variables() с рекурсивными ссылками (GH-20836)
Opcache:
• Segfault в Tracing JIT при работе с object reference (GH-20818)
OpenSSL:
• Утечки памяти при сбое sk_X509_new_null()
• Падения в openssl_x509_parse() при ошибках i2s_ASN1_INTEGER() и X509_NAME_oneline()
Phar:
• buildFromIterator() корректно работает при отсутствующей базовой директории (GH-20882)
PGSQL:
• Исправлена сборка INSERT/UPDATE-запросов через PQescapeIdentifier() и возможное неопределённое поведение
Readline:
• Утечка памяти при переопределении некоторых настроек через readline_info() (GH-18139)
SPL:
• heap-use-after-free в итераторе SplDoublyLinkedList при модификации во время итерации (GH-20856)
Standard:
• lchown() теперь корректно меняет владельца симлинка в ZTS-сборках (bug #74357)
• var_dump() больше не падает с вложенными объектами (GH-20843)
➡️ Полный список изменений в PHP 8.5.3
📱 @dev_notes_ru
#php #release #changelog #php85
Команда разработчиков PHP объявила о выходе PHP 8.5.3. Это релиз, направленный на исправление ошибок.
📌 Что исправлено:
Ядро (Core):
• Исправлена совместимость preserve_none с LTO (GH-20806)
• Сборка на macOS с musttail/preserve_none больше не падает (GH-20767)
• Устранён NULL dereference при вызове ob_start() в shutdown-функции (GH-20837)
• Бесконечный цикл в GC-деструкторе Fiber (OSS-Fuzz #471533782)
• Сломавшаяся оптимизация block_pass JMP[N]Z (OSS-Fuzz #472563272)
• Внутренние enum'ы больше нельзя клонировать и сравнивать (GH-20914)
• Утечка значения по умолчанию унаследованного свойства (OSS-Fuzz #474613951)
• ReflectionProperty теперь корректно возвращает PHPDoc при наличии атрибута с Closure (GH-20895)
• Use-after-free в FE_FREE при взаимодействии с GC (GH-20766)
• Исправлена by-ref запись в неинициализированное hooked-свойство (OSS-Fuzz #471486164)
• Устранён UAF во вложенных finally с повторной проверкой типа (OSS-Fuzz #438780145)
• Баг с __clone у ленивых прокси (GH-20905)
• Переполнение hooked-свойств объектов (GH-20479)
Date:
• Обновление timelib до версии 2022.16
DOM:
• Dom\HTMLDocument больше не ломает закрывающие теги внутри script (GH-21041)
MbString:
• Деление на ноль в mb_str_pad() при некорректной кодировке строки-заполнителя (GH-20833)
• Переполнение стека в mb_convert_variables() с рекурсивными ссылками (GH-20836)
Opcache:
• Segfault в Tracing JIT при работе с object reference (GH-20818)
OpenSSL:
• Утечки памяти при сбое sk_X509_new_null()
• Падения в openssl_x509_parse() при ошибках i2s_ASN1_INTEGER() и X509_NAME_oneline()
Phar:
• buildFromIterator() корректно работает при отсутствующей базовой директории (GH-20882)
PGSQL:
• Исправлена сборка INSERT/UPDATE-запросов через PQescapeIdentifier() и возможное неопределённое поведение
Readline:
• Утечка памяти при переопределении некоторых настроек через readline_info() (GH-18139)
SPL:
• heap-use-after-free в итераторе SplDoublyLinkedList при модификации во время итерации (GH-20856)
Standard:
• lchown() теперь корректно меняет владельца симлинка в ZTS-сборках (bug #74357)
• var_dump() больше не падает с вложенными объектами (GH-20843)
➡️ Полный список изменений в PHP 8.5.3
#php #release #changelog #php85
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
CSS
Надоело ломать голову над классами вроде
С декабря 2025 года у нас есть официальное решение:
В новом материале разобрали, как технология меняет повседневную работу:
✅ Упрощаем BEM: класс только на родителе, внутри — простые теги.
✅ Дружим с Tailwind: оставляем утилиты для сетки, а уникальный дизайн выносим в
✅ Убираем
Спойлер:внедрять можно точечно, не переписывая весь проект.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend #BEM #Tailwind
@scope: Как изолировать стили без BEM и TailwindНадоело ломать голову над классами вроде
.user-panel__subscription-status--is-pending? Устали от простынь из утилитарных классов в HTML? 😫С декабря 2025 года у нас есть официальное решение:
@scope получил статус Baseline и работает во всех современных браузерах. Это не препроцессор, а нативный CSS, который останавливает «войны специфичности».В новом материале разобрали, как технология меняет повседневную работу:
@scope.!important: правило близости (proximity) решает конфликты без костылей.Спойлер:
#CSS #Frontend #BEM #Tailwind
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Интеграция каскадных слоёв в существующий проект
В теории каскадные слои (
Мы провели рефакторинг реального сайта с 450+ строками «органически выросшего» CSS. Результат — пошаговая стратегия внедрения Cascade Layers без остановки разработки.
В статье:
✅ Подготовка: анализ, удаление мёртвого кода и зачистка
✅ Архитектура: почему выбрали именно 5 слоёв (
✅ Болевые точки: куда размещать медиазапросы, как импортировать шрифты и подключать библиотеки.
Основной вывод: Слои не исправляют хаос автоматически. Они лишь инструмент, и успех миграции зависит от качества подготовительного рефакторинга.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend
В теории каскадные слои (
@layer) выглядят как серебряная пуля для управления специфичностью. Но что делать, если у вас не стартап с нуля, а проект, который рос и развивался годами?Мы провели рефакторинг реального сайта с 450+ строками «органически выросшего» CSS. Результат — пошаговая стратегия внедрения Cascade Layers без остановки разработки.
В статье:
!important (это критически важно).reset, base, layout, components, animations) и отказались от под-слоёв.Основной вывод:
#CSS #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Модальное окно или диалог: как выбрать и не сломать доступность
Проектируете модальные окна? А знаете, чем они принципиально отличаются от не-модальных диалогов? 🤔
Это не просто вопрос терминологии. Неверный выбор типа компонента ломает сценарии для клавиатурных пользователей и людей со скринридерами. А неправильная реализация даже правильного выбора делает интерфейс недоступным.
В новом материале разобрали тему от и до:
✅ Алгоритм выбора: три вопроса, которые переводят проектное решение из разряда «по ощущениям» в разряд обоснованных критериев.
✅ Техническая реализация: что нативный
✅ Стилизация и анимация: важное ограничение
✅ Чек-лист доступности: 20+ пунктов для проверки перед релизом.
Бонус:Разбор вложенных модалок, работы с кастомными контролами и обработки длинного контента.
🖥 Читать статью
📱 @dev_notes_ru
#a11y #Frontend #CSS #HTML #JavaScript
Проектируете модальные окна? А знаете, чем они принципиально отличаются от не-модальных диалогов? 🤔
Это не просто вопрос терминологии. Неверный выбор типа компонента ломает сценарии для клавиатурных пользователей и людей со скринридерами. А неправильная реализация даже правильного выбора делает интерфейс недоступным.
В новом материале разобрали тему от и до:
<dialog> делает за вас, а за что всё ещё отвечаете вы (спойлер: возврат фокуса — за вами).transition и как его обойти.Бонус:
#a11y #Frontend #CSS #HTML #JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2🔥1
Как писать CSS с
Помните головную боль с переопределением стилей во вложенных компонентах? Когда в навигации нужно стилизовать ссылки, но не трогать те, что внутри выпадающих меню? Раньше — сбросы и !important. Теперь — нативный
🔥 Событие, которого мы ждали годы: последний из мейнстрим-браузеров (да, Firefox) включил поддержку
В новом материале — только практика, без воды:
🔹 Как работает donut scoping (скоуп в виде бублика)
🔹 Где писать
🔹 Чем
Код можно копировать и вставлять в проект уже сегодня.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend #JavaScript #scope
@scope: Полный разбор синтаксиса, изоляция стилей и donut scopingПомните головную боль с переопределением стилей во вложенных компонентах? Когда в навигации нужно стилизовать ссылки, но не трогать те, что внутри выпадающих меню? Раньше — сбросы и !important. Теперь — нативный
@scope.🔥 Событие, которого мы ждали годы: последний из мейнстрим-браузеров (да, Firefox) включил поддержку
@scope. Это значит, что технология получила статус Baseline и готова к продакшену.В новом материале — только практика, без воды:
🔹 Как работает donut scoping (скоуп в виде бублика)
🔹 Где писать
@scope: во внешних CSS или прямо в HTML-компонентах🔹 Чем
:scope в CSS отличается от :scope в JavaScriptКод можно копировать и вставлять в проект уже сегодня.
#CSS #Frontend #JavaScript #scope
Please open Telegram to view this post
VIEW IN TELEGRAM
JSDoc на практике: как добавить типизацию в JS-проект без TypeScript
Наверное, каждый сталкивался с дилеммой: хочется типизацию, но втягивать TypeScript в проект и настраивать сборку ради этого — слишком жирно. Есть ли золотая середина?
Да, и это связка JSDoc + TypeScript Compiler. Без единого
🔹 Как настроить
🔹 Как типизировать переменные, функции и DOM без боли.
🔹 Как собирать кастомные типы через
Код по-прежнему работает прямо в браузере, а ошибки отлавливаются на этапе написания.
🖥 Читать статью
📱 @dev_notes_ru
#jsdoc #JavaScript #TypeScript
Наверное, каждый сталкивался с дилеммой: хочется типизацию, но втягивать TypeScript в проект и настраивать сборку ради этого — слишком жирно. Есть ли золотая середина?
Да, и это связка JSDoc + TypeScript Compiler. Без единого
.ts файла, но с полноценной проверкой в редакторе и CI. Разобрал реализацию этого подхода в проекте Kelp (автор — Крис Фердинанди). Делюсь выводами и настройками:🔹 Как настроить
tsc для работы с ванильным JS.🔹 Как типизировать переменные, функции и DOM без боли.
🔹 Как собирать кастомные типы через
@typedef и не плодить дубли.Код по-прежнему работает прямо в браузере, а ошибки отлавливаются на этапе написания.
#jsdoc #JavaScript #TypeScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Fluid-типографика: полное руководство по созданию адаптивных и доступных текстов
Вы когда-нибудь увеличивали масштаб страницы (
Хорошая новость: современный CSS позволяет сделать так, чтобы текст одновременно:
✅ Плавно подстраивался под экран
✅ Уважал личные настройки шрифта
✅ Проходил WCAG 1.4.4 (доступность)
В новой статье разобрали подход от простых медиазапросов к сложной, но элегантной системе на
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend #A11y
Вы когда-нибудь увеличивали масштаб страницы (
Ctrl/Cmd +), чтобы прочитать текст, но ничего не происходило? 🧐 Это не баг, а особенность «адаптивной» верстки, в которой размер привязан только к ширине экрана.Хорошая новость: современный CSS позволяет сделать так, чтобы текст одновременно:
В новой статье разобрали подход от простых медиазапросов к сложной, но элегантной системе на
clamp() и pow(). В конце — готовый чек-лист и формула, которую можно скопировать в проект.#CSS #Frontend #A11y
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
Итераторы в JavaScript: подробное руководство с примерами
Вы точно пользуетесь итераторами каждый день — в
Если в голове каша из терминов «протокол итерации», Symbol.iterator и
✅ Чёткое разделение: iterable vs iterator — больше никакой путаницы
✅ Как работают
✅ Почему итераторы не создают копии данных в памяти (и когда это критично)
✅ Современный
И да, аналогия с книгой и закладкой действительно объясняет всё.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #Итераторы
Вы точно пользуетесь итераторами каждый день — в
for...of, spread-операторе, деструктуризации. Но сможете сходу объяснить, чем итерируемый объект отличается от итератора? 🤔Если в голове каша из терминов «протокол итерации», Symbol.iterator и
next(), вот чёткое объяснение с примерами:keys(), values(), entries() на самом делеIterator.from() и ленивые методы (take, drop, filter)И да, аналогия с книгой и закладкой действительно объясняет всё.
#JavaScript #Итераторы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Обработка параметров в JavaScript обработчиках событий
Вопрос управления обработчиками событий часто недооценивают, пока не возникает проблема с утечками памяти в SPA. Когда обработчику требуется передать параметры (например, ID сущности), стандартные подходы перестают работать предсказуемо, а удаление таких обработчиков становится нетривиальной задачей.
В новой статье системно разобрали эту тему:
✅ Почему нельзя просто написать
✅ Как работают замыкания и
✅ Когда делегирование событий производительнее индивидуальных обработчиков
✅ Шпаргалка: 4 вопроса, которые помогут выбрать правильный паттерн
Материал будет полезен, если вы пишете на чистом JS или хотите лучше понимать, как работают события внутри фреймворков.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript
Вопрос управления обработчиками событий часто недооценивают, пока не возникает проблема с утечками памяти в SPA. Когда обработчику требуется передать параметры (например, ID сущности), стандартные подходы перестают работать предсказуемо, а удаление таких обработчиков становится нетривиальной задачей.
В новой статье системно разобрали эту тему:
addEventListener('click', deleteTask(id))AbortController для передачи параметровМатериал будет полезен, если вы пишете на чистом JS или хотите лучше понимать, как работают события внутри фреймворков.
#JavaScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👌1
Команда Laravel выпустила обновление v12.53.0. Этот релиз получился насыщенным: он добавляет новые возможности для работы с JSON-схемами и очередями, исправляет ряд неприятных багов и содержит несколько важных внутренних улучшений.
Ключевые нововведения
🔹Контроль параллелизма с любым кэшем: Добавлен метод
Cache::funnel() для ограничения одновременного выполнения задач (throttling) с использованием любого драйвера кэша. Раньше такая возможность была только у Redis через RedisThrottle, теперь она универсальна (#58439).🔹Улучшена работа с JSON Schema: Добавлена поддержка ключей
multipleOf для числовых типов (#58903) и uniqueItems для массивов (#58922). Это делает генерацию и валидацию сложных JSON-схем более точной и стандартизированной.🔹Полнотекстовый поиск по векторам: В
whereFullText() добавлена опция для работы с предварительно вычисленными tsvector колонками в PostgreSQL. Это ускоряет поиск, если векторы обновляются не в реальном времени (#58893).🔹Именованные аргументы в событиях: Теперь при диспатче событий и их трансляции можно использовать именованные аргументы, что повышает читаемость кода при работе с конструкторами событий (#58913).
🔹Поддержка сериализуемых классов в кэше: Внесены доработки для корректной работы с классами, реализующими интерфейс
Serializable, при помещении их в кэш (#58911).Существенные исправления
🔹Исправлена сериализация моделей в очередях: Устранена проблема, из-за которой при определенных условиях сериализация модели в задании очереди могла работать некорректно (#58939).
🔹Исправлена работа
RetryCommand для SQS FIFO: Команда повторной обработки проваленных заданий теперь корректно работает с очередями SQS FIFO (#58936).🔹Устранена проблема с deadlock в транзакциях: Добавлен откат "зависшей" PDO-транзакции перед повторной попыткой коммита при deadlock. Это повышает надежность работы с БД в высоконагруженных сценариях (#58906).
🔹Исправлена гонка при создании кэша real-time фасадов: Устранен редкий баг, который мог приводить к ошибкам при конкурентном создании файла кэша для фасадов (#58947).
Улучшения для разработчиков
🔹Тестирование сессий: Метод
assertSessionHasAll() при провале теста теперь показывает все несовпадающие значения, а не только первое. Это экономит время при отладке (#58946).🔹Очереди: В выводе команды
queue:monitor теперь гарантированно отображается значение oldest_pending для лучшего мониторинга "застрявших" заданий (#58952).🔹JSONP Check: Добавлена проверка для корректной работы с JSONP-запросами, повышающая безопасность и совместимость (#58971).
🔹Команда
down: Теперь поддерживает обновление опций режима обслуживания без необходимости повторного ввода всех флагов (#58918).Итог: Это мощный минорный релиз, который будет полезен практически всем. Обновление настоятельно рекомендуется, особенно если вы используете JSON Schema, очереди или сложную валидацию.
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Руководство по стилю объектного проектирования для PHP 8.5
Хватит писать код, который только имитирует инкапсуляцию. 🙃
В 2019-м Нобак выпустил Object Design Style Guide — манифест о том, какими должны быть объекты. В 2025-м PHP 8.5 наконец-то догнал эту философию и встроил её прямо в синтаксис.
Теперь не нужно выбирать между «правильно» и «быстро». В статье рассматриваем, как новые фичи меняют повседневную практику:
✅ Асимметричная видимость — вместо связки private field + public getter.
✅ Хуки свойств — валидация и виртуальные поля без дублирования.
✅ Clone with и readonly-классы — настоящая иммутабельность без риска ошибиться.
✅ Pipe-оператор — линейные цепочки сервисов без ада вложенности.
🖥 Читать статью
📱 @dev_notes_ru
#PHP85 #PHP
Хватит писать код, который только имитирует инкапсуляцию. 🙃
В 2019-м Нобак выпустил Object Design Style Guide — манифест о том, какими должны быть объекты. В 2025-м PHP 8.5 наконец-то догнал эту философию и встроил её прямо в синтаксис.
Теперь не нужно выбирать между «правильно» и «быстро». В статье рассматриваем, как новые фичи меняют повседневную практику:
#PHP85 #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥5
Firefox 148: обновления для разработчиков и улучшения безопасности
24 февраля 2026 года состоялся релиз стабильной версии Firefox 148. В этом выпуске представлен ряд изменений, направленных на повышение производительности, расширение поддержки веб-стандартов и усиление безопасности. Ниже приведён обзор ключевых нововведений.
🚀 Улучшения для веб-разработчиков
HTML
Синхронная загрузка
CSS
Якорное позиционирование. Реализована поддержка свойства position-try-order, позволяющего задавать порядок перебора запасных позиций для элементов с якорным позиционированием. Свойство position-area теперь гарантирует корректное удержание привязанного элемента в пределах видимой области.
Обработка переполнения. Свойства
Функция
JavaScript
Комбинирование итераторов. Добавлены статические методы
Модернизация устаревших возможностей RegExp. В рамках реализации предложения TC39 Legacy RegExp Features проведена нормализация статических свойств RegExp (
API
Защита от XSS-атак. Внедрена поддержка Sanitizer API для безопасной очистки HTML перед вставкой в DOM, а также Trusted Types API, обеспечивающего проверку данных, передаваемых в потенциально опасные функции и свойства.
Навигация и события. Реализовано свойство
Работа с буфером обмена. Команда "paste" для
🛠 WebDriver (WebDriver BiDi, Marionette)
Взаимодействие с chrome браузера. В WebDriver BiDi добавлена начальная поддержка chrome-контекстов. Команда
Исправления и оптимизация. Устранены состояния гонки при создании новых окон и навигации, а также ошибки, связанные с перенаправлением на страницы с ошибками и декодированием фрагментированных тел ответов. Производительность выполнения команд WebDriver BiDi улучшена при работе с недоступными контекстами.
Новые возможности Marionette. Добавлена команда
🧪 Экспериментальные функции
В версии 148 на стадии эксперимента (доступны в ночных сборках при включении соответствующей настройки) находится Document Picture-in-Picture API. API позволяет создавать окно поверх всех окон с произвольным HTML-содержимым, например, для отображения кастомных элементов управления видео или участников видеоконференции.
Полный список изменений доступен в официальной документации: Firefox 148 release notes.
📱 @dev_notes_ru
#Firefox
24 февраля 2026 года состоялся релиз стабильной версии Firefox 148. В этом выпуске представлен ряд изменений, направленных на повышение производительности, расширение поддержки веб-стандартов и усиление безопасности. Ниже приведён обзор ключевых нововведений.
🚀 Улучшения для веб-разработчиков
HTML
Синхронная загрузка
about:blank. Изменён механизм загрузки первоначального пустого документа. Теперь при навигации на about:blank документ загружается синхронно, что устраняет избыточную асинхронную замену и оптимизирует событие load. Изменение направлено на ускорение начальной отрисовки страниц.CSS
Якорное позиционирование. Реализована поддержка свойства position-try-order, позволяющего задавать порядок перебора запасных позиций для элементов с якорным позиционированием. Свойство position-area теперь гарантирует корректное удержание привязанного элемента в пределах видимой области.
Обработка переполнения. Свойства
overflow, overflow-x и overflow-y стали применимы к заменяемым элементам (например, изображениям) аналогично другим элементам, обеспечивая предсказуемое поведение при переполнении контейнера.Функция
shape(). Стандартизирована и включена по умолчанию поддержка функции shape() для создания сложных фигур в свойствах clip-path и offset-path. В отличие от path(), функция использует синтаксис CSS, что позволяет применять единицы измерения и математические функции для большей гибкости.JavaScript
Комбинирование итераторов. Добавлены статические методы
Iterator.zip() и Iterator.zipKeyed(), предназначенные для объединения данных из нескольких итераторов в позиционно согласованные группы.Модернизация устаревших возможностей RegExp. В рамках реализации предложения TC39 Legacy RegExp Features проведена нормализация статических свойств RegExp (
$1-$9, input и др.). Теперь они являются настраиваемыми и неперечисляемыми, что позволяет, например, удалять их с объекта RegExp.API
Защита от XSS-атак. Внедрена поддержка Sanitizer API для безопасной очистки HTML перед вставкой в DOM, а также Trusted Types API, обеспечивающего проверку данных, передаваемых в потенциально опасные функции и свойства.
Навигация и события. Реализовано свойство
Location.ancestorOrigins для определения происхождения родительских документов при встраивании через <iframe>. Для события pointerrawupdate добавлена корректная передача значений movementX и movementY.Работа с буфером обмена. Команда "paste" для
Document.execCommand() теперь доступна в веб-контенте и реализована через Clipboard API с соблюдением всех требований безопасности.🛠 WebDriver (WebDriver BiDi, Marionette)
Взаимодействие с chrome браузера. В WebDriver BiDi добавлена начальная поддержка chrome-контекстов. Команда
browsingContext.getTree с новым параметром moz:scope: chrome позволяет получать доступ к элементам интерфейса Firefox при запуске с флагом --remote-allow-system-access.Исправления и оптимизация. Устранены состояния гонки при создании новых окон и навигации, а также ошибки, связанные с перенаправлением на страницы с ошибками и декодированием фрагментированных тел ответов. Производительность выполнения команд WebDriver BiDi улучшена при работе с недоступными контекстами.
Новые возможности Marionette. Добавлена команда
Reporting:GenerateTestReport для генерации тестовых отчетов через Reporting API.🧪 Экспериментальные функции
В версии 148 на стадии эксперимента (доступны в ночных сборках при включении соответствующей настройки) находится Document Picture-in-Picture API. API позволяет создавать окно поверх всех окон с произвольным HTML-содержимым, например, для отображения кастомных элементов управления видео или участников видеоконференции.
Полный список изменений доступен в официальной документации: Firefox 148 release notes.
#Firefox
Please open Telegram to view this post
VIEW IN TELEGRAM
🤝1
Чистое API для чтения PHP-атрибутов
Сколько строк кода вы пишете, чтобы просто прочитать один атрибут у класса? Обычно это 3-5 строк с
Spatie выпустили элегантное решение spatie/php-attribute-reader, которое превращает это безобразие в одну строку. Зацените:
Что ещё умеет пакет:
🔹Искать атрибуты по всей иерархии классов (с поддержкой
🔹Работать с повторяющимися атрибутами (например,
🔹Возвращать удобный объект с контекстом: к какому свойству или методу привязан атрибут.
В статье рассматриваем, как искать атрибуты по всему классу разом и работать с иерархиями.
🖥 Читать статью
📱 @dev_notes_ru
#PHP8 #PHP
Сколько строк кода вы пишете, чтобы просто прочитать один атрибут у класса? Обычно это 3-5 строк с
ReflectionClass, проверкой count($attributes) > 0 и вызовом newInstance(). А если нужно найти все атрибуты Validate в свойствах, методах и параметрах — код разрастается до неприличных размеров.Spatie выпустили элегантное решение spatie/php-attribute-reader, которое превращает это безобразие в одну строку. Зацените:
$route = Attributes::get(MyController::class, Route::class);
Что ещё умеет пакет:
🔹Искать атрибуты по всей иерархии классов (с поддержкой
IS_INSTANCEOF).🔹Работать с повторяющимися атрибутами (например,
#[Middleware]).🔹Возвращать удобный объект с контекстом: к какому свойству или методу привязан атрибут.
В статье рассматриваем, как искать атрибуты по всему классу разом и работать с иерархиями.
#PHP8 #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM