Команда 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
Trusted Publishing в npm: пошаговое руководство по настройке
В связи с участившимися атаками на цепочки поставок и отзывом долгоживущих npm-токенов, разработчикам необходимо перейти на механизм доверенной публикации (trusted publishing). При обновлении рабочего процесса выяснилось, что ряд важных деталей в официальной документации npm либо опущены, либо изложены недостаточно явно.
В статье собраны практические шаги для успешной настройки:
✅ Регистрация доверенного издателя через интерфейс npm (и где его искать).
✅ Корректная конфигурация package.json и прав доступа в GitHub Actions.
✅ Типичные ошибки при публикации и способы их устранения (включая ошибку 403).
Материал будет полезен всем, кто поддерживает публичные npm-пакеты и использует автоматическую публикацию через GitHub Actions.
🖥 Читать статью
📱 @dev_notes_ru
#NodeJS #NPM
В связи с участившимися атаками на цепочки поставок и отзывом долгоживущих npm-токенов, разработчикам необходимо перейти на механизм доверенной публикации (trusted publishing). При обновлении рабочего процесса выяснилось, что ряд важных деталей в официальной документации npm либо опущены, либо изложены недостаточно явно.
В статье собраны практические шаги для успешной настройки:
Материал будет полезен всем, кто поддерживает публичные npm-пакеты и использует автоматическую публикацию через GitHub Actions.
#NodeJS #NPM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
URL Pattern API: Руководство по нативной маршрутизации в JavaScript
Обработка URL — одна из типовых задач как на клиенте, так и на сервере. Традиционный подход с ручным разбором строк быстро становится громоздким при появлении опциональных параметров или вложенных путей.
С сентября 2025 года у JavaScript-разработчиков появился встроенный инструмент для этой задачи — URL Pattern API. Он предоставляет единый синтаксис для валидации URL и извлечения параметров, который работает во всех современных браузерах и в Node.js/Deno/Bun.
В статье подробно разбираются:
✅ Синтаксис шаблонов: именованные группы, модификаторы, регулярные выражения.
✅ API: методы
✅ Практика: примеры использования в Service Worker, SPA и серверном приложении.
Также в материале затронуты вопросы производительности и ограничения использования API для высоконагруженных серверных проектов.
🖥 Читать статью
📱 @dev_notes_ru
#JavaScript #WebAPI
Обработка URL — одна из типовых задач как на клиенте, так и на сервере. Традиционный подход с ручным разбором строк быстро становится громоздким при появлении опциональных параметров или вложенных путей.
С сентября 2025 года у JavaScript-разработчиков появился встроенный инструмент для этой задачи — URL Pattern API. Он предоставляет единый синтаксис для валидации URL и извлечения параметров, который работает во всех современных браузерах и в Node.js/Deno/Bun.
В статье подробно разбираются:
test() для проверки соответствия и exec() для извлечения данных.Также в материале затронуты вопросы производительности и ограничения использования API для высоконагруженных серверных проектов.
#JavaScript #WebAPI
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Атрибуты и свойства HTML: в чём разница
Распространённая ситуация: разработчик пытается прочитать значение поля ввода через
Это не ошибка JavaScript, а следствие фундаментального различия между атрибутами и свойствами DOM. Атрибуты — это исходные параметры, заданные в HTML (чертёж элемента). Свойства — это текущее состояние DOM-объекта в памяти браузера (реальность). И они могут расходиться.
В новой статье детально разбирается:
✅ Почему
✅ Как работает
✅ Особенности логических атрибутов (
✅ Что важно знать о свойствах и атрибутах разработчикам на React.
Материал будет полезен как начинающим, так и опытным разработчикам, желающим систематизировать знания о DOM.
🖥 Читать статью
📱 @dev_notes_ru
#HTML #JavaScript #DOM #Frontend
Распространённая ситуация: разработчик пытается прочитать значение поля ввода через
getAttribute('value'), но получает не актуальные данные, введённые пользователем, а первоначальное значение из HTML-разметки.Это не ошибка JavaScript, а следствие фундаментального различия между атрибутами и свойствами DOM. Атрибуты — это исходные параметры, заданные в HTML (чертёж элемента). Свойства — это текущее состояние DOM-объекта в памяти браузера (реальность). И они могут расходиться.
В новой статье детально разбирается:
input.value и getAttribute('value') ведут себя по-разному.defaultValue и для чего он нужен.checked, disabled).Материал будет полезен как начинающим, так и опытным разработчикам, желающим систематизировать знания о DOM.
#HTML #JavaScript #DOM #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Зачем нужен
При верстке изображений у разработчиков часто возникает вопрос: чем отличается атрибут
О чем статья:
✅
✅
✅ Простой тест, который поможет определить, нужна ли изображению подпись или достаточно грамотно заполненного
Материал будет полезен всем, кто работает с контентом и стремится сделать верстку семантически правильной и доступной.
🖥 Читать статью
📱 @dev_notes_ru
#A11y #HTML #Frontend
figcaption, если есть altПри верстке изображений у разработчиков часто возникает вопрос: чем отличается атрибут
alt от элемента <figcaption> и можно ли их использовать взаимозаменяемо? На первый взгляд оба элемента отвечают за описание, но их функции принципиально различаются.О чем статья:
alt — это замена изображения для тех, кто не может его увидеть (пользователи скринридеров, отключенные изображения).<figcaption> — это видимая подпись, поясняющая роль изображения в тексте для всех читателей.alt.Материал будет полезен всем, кто работает с контентом и стремится сделать верстку семантически правильной и доступной.
#A11y #HTML #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Понижаем приоритет группы CSS-правил с помощью
Управление приоритетами CSS-правил — одна из ключевых задач при поддержке проекта любого масштаба. Традиционные методы (контроль порядка подключения, повышение специфичности) не всегда эффективны, особенно при работе со сторонними библиотеками или унаследованным кодом.
Альтернативный подход — использование каскадных слоёв (
В статье рассматриваются:
✅ Три типовых сценария для применения этой техники.
✅ Особенности интеграции слоёв в существующую архитектуру.
✅ Специфика работы
Будет полезно всем, кто стремится выстроить чистую и предсказуемую CSS-архитектуру.
🖥 Читать статью
📱 @dev_notes_ru
#CSS #Frontend
@layerУправление приоритетами CSS-правил — одна из ключевых задач при поддержке проекта любого масштаба. Традиционные методы (контроль порядка подключения, повышение специфичности) не всегда эффективны, особенно при работе со сторонними библиотеками или унаследованным кодом.
Альтернативный подход — использование каскадных слоёв (
@layer). Помещение "базовых" стилей (например, reset.css) в отдельный слой гарантирует, что они будут уступать основным правилам проекта, написанным вне слоя.В статье рассматриваются:
!important внутри каскадного слоя.Будет полезно всем, кто стремится выстроить чистую и предсказуемую CSS-архитектуру.
#CSS #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
📰 Ежемесячный дайджест Baseline: январь 2026
Привет! Встречайте первый в этом году выпуск Baseline Digest. Мы собрали для вас все важные новинки веб-платформы, которые в январе достигли новых этапов в проекте Baseline. Поехали!🚀
✅ Новое в категории Newly Available
Эти функции теперь стабильно работают во всех основных браузерах.
1. Псевдокласс
Позволяет стилизовать корневой элемент документа во время перехода между состояниями страницы (View Transition). Это дает тонкий контроль над анимацией смены контента.
2. JavaScript-модули в Service Workers
Теперь и в Service Worker можно использовать стандартные
3. Navigation API
Современная замена устаревшему History API, созданная специально для Single Page Applications (SPA). Дает единый способ управления навигацией, включая кнопки «назад/вперед», с меньшим количеством шаблонного кода.
4. Новые CSS-единицы (относительно root):
🌐 Новое в категории (Widely Available
Эти функции уже давно с нами, а теперь окончательно подтвердили свою стабильность и готовы к использованию в любых проектах.
1. Двухзначное свойство
Вместо
2. Свойство
Определяет, как накладываются друг на друга несколько анимаций, влияющих на одно и то же свойство. Доступны режимы:
3. Иммутабельные методы массивов
toReversed(), toSorted() и
🖥 January 2026 Baseline monthly digest
📱 @dev_notes_ru
#Baseline #Frontend
Привет! Встречайте первый в этом году выпуск Baseline Digest. Мы собрали для вас все важные новинки веб-платформы, которые в январе достигли новых этапов в проекте Baseline. Поехали!
✅ Новое в категории Newly Available
Эти функции теперь стабильно работают во всех основных браузерах.
1. Псевдокласс
:active-view-transitionПозволяет стилизовать корневой элемент документа во время перехода между состояниями страницы (View Transition). Это дает тонкий контроль над анимацией смены контента.
2. JavaScript-модули в Service Workers
Теперь и в Service Worker можно использовать стандартные
import/export! Просто добавьте { type: 'module' } при регистрации. Это упрощает организацию кода и управление зависимостями.3. Navigation API
Современная замена устаревшему History API, созданная специально для Single Page Applications (SPA). Дает единый способ управления навигацией, включая кнопки «назад/вперед», с меньшим количеством шаблонного кода.
4. Новые CSS-единицы (относительно root):
rcap: Высота заглавных букв корневого элемента. Идеально для точной типографики.rch: Ширина символа 0 в шрифте корневого элемента.rex: Высота строчных букв (ex) корневого элемента. Полезно для вертикального выравнивания.ric: Ширина/высота иероглифа (CJK) корневого элемента. Незаменимо для многоязычных интерфейсов.🌐 Новое в категории (Widely Available
Эти функции уже давно с нами, а теперь окончательно подтвердили свою стабильность и готовы к использованию в любых проектах.
1. Двухзначное свойство
displayВместо
inline-flex можно писать display: inline flex. Это разделяет «внешний» (как элемент взаимодействует с потоком) и «внутренний» (как ведут себя дочерние элементы) типы отображения. Более логично и гибко.2. Свойство
animation-compositionОпределяет, как накладываются друг на друга несколько анимаций, влияющих на одно и то же свойство. Доступны режимы:
replace (заменить), add (добавить) и accumulate (накопить).3. Иммутабельные методы массивов
toReversed(), toSorted() и
toSpliced() — новые методы, которые возвращают новый массив с изменениями, не трогая исходный. Это шаг к более чистому и предсказуемому функциональному программированию на JavaScript.#Baseline #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Soft Delete в Laravel: Как настроить, использовать и восстанавливать данные
Soft delete часто воспринимается как простая тема, однако на практике возникает множество вопросов: как правильно тестировать эту функциональность, учитывать требования GDPR, настраивать привязку к маршрутам и автоматически очищать устаревшие записи.
В статье последовательно разобраны следующие темы:
✅ Настройка
✅ Работа с методами
✅ Применение
✅ Тестирование soft delete с использованием встроенных assertion-методов
Материал будет полезен как для внедрения мягкого удаления в новых проектах, так и для рефакторинга существующего кода.
🖥 Читать статью
📱 @dev_notes_ru
#Laravel #Eloquent #PHP #SoftDelete
Soft delete часто воспринимается как простая тема, однако на практике возникает множество вопросов: как правильно тестировать эту функциональность, учитывать требования GDPR, настраивать привязку к маршрутам и автоматически очищать устаревшие записи.
В статье последовательно разобраны следующие темы:
SoftDeletes и создание миграцииwithTrashed(), onlyTrashed() и restore()Prunable для автоматической очистки базы данныхМатериал будет полезен как для внедрения мягкого удаления в новых проектах, так и для рефакторинга существующего кода.
#Laravel #Eloquent #PHP #SoftDelete
Please open Telegram to view this post
VIEW IN TELEGRAM
Как сделать Laravel-контроллер тестируемым и перестать бояться рефакторинга
Вы уверены, что ваши тесты действительно что-то тестируют? 🤔
Представьте: вы случайно (ну, бывает) закомментировали ключевой вызов сервиса в контроллере подписки. Прогоняете тесты — все зеленое! Отличная работа, можно деплоить. А подписчики в это время не подписываются. Знакомое чувство ложной безопасности?
Статья как раз об этой проблеме: когда тесты проверяют ответ, но игнорируют поведение. Разобрал на живом примере, как один
Что внутри:
🔹 Почему создание сервисов через
🔹 Как внедрение зависимости (
🔹 Прием с
🔹 Сравнение
Если хотите писать тесты, которые находят проблемы, а не просто «проходят», — заглядывайте.
🖥 Читать статью
📱 @dev_notes_ru
#Laravel #TDD #PHP
Вы уверены, что ваши тесты действительно что-то тестируют? 🤔
Представьте: вы случайно (ну, бывает) закомментировали ключевой вызов сервиса в контроллере подписки. Прогоняете тесты — все зеленое! Отличная работа, можно деплоить. А подписчики в это время не подписываются. Знакомое чувство ложной безопасности?
Статья как раз об этой проблеме: когда тесты проверяют ответ, но игнорируют поведение. Разобрал на живом примере, как один
new в контроллере делает ваш код непроверяемым.Что внутри:
🔹 Почему создание сервисов через
new — путь к хрупким тестам.🔹 Как внедрение зависимости (
Dependency Injection) спасает ситуацию.🔹 Прием с
resolve() для "легаси-кода", когда менять сигнатуру метода нельзя.🔹 Сравнение
$this->mock() и чистого Mockery — чувствуем разницу.Если хотите писать тесты, которые находят проблемы, а не просто «проходят», — заглядывайте.
#Laravel #TDD #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥2
Приёмы работы с PostgreSQL, меняющие архитектуру решений
Когда речь заходит о проверке целостности данных, например, запрете пересекающихся интервалов бронирования, возникает вопрос: где разместить эту логику? В коде приложения или на стороне базы данных? PostgreSQL предоставляет инструменты, которые позволяют делегировать такие проверки уровню СУБД, снижая нагрузку на прикладной код и минимизируя риски состояний гонки.
В статье рассматриваются:
✅ Ограничение
✅ Генерируемые колонки (
✅ Рекурсивные CTE — обход иерархий и графов в несколько строк вместо императивных конструкций.
✅
Материал будет полезен разработчикам, которые стремятся писать более лаконичный и надёжный код, опираясь на возможности реляционной модели.
🖥 Читать статью
📱 @dev_notes_ru
#PostgreSQL #SQL #Database
Когда речь заходит о проверке целостности данных, например, запрете пересекающихся интервалов бронирования, возникает вопрос: где разместить эту логику? В коде приложения или на стороне базы данных? PostgreSQL предоставляет инструменты, которые позволяют делегировать такие проверки уровню СУБД, снижая нагрузку на прикладной код и минимизируя риски состояний гонки.
В статье рассматриваются:
EXCLUDE — декларативный способ запретить пересечение интервалов без дополнительных проверок в коде.GENERATED) — вычисление производных значений непосредственно в базе.JSONB и композитные типы — сравнение подходов к моделированию гибких структур данных.Материал будет полезен разработчикам, которые стремятся писать более лаконичный и надёжный код, опираясь на возможности реляционной модели.
#PostgreSQL #SQL #Database
Please open Telegram to view this post
VIEW IN TELEGRAM
Быстрый совет: не используйте
Элемент
Проблема в том, что
Далее, скринридеры. Большинство скринридеров не озвучивают атрибут
Гораздо лучше вернуться к старому газетному стилю: в первый раз напишите полную фразу, а затем в скобках — аббревиатуру. После этого можете использовать только сокращение.
#a11y #HTML
<abbr>Элемент
<abbr> предназначен для обозначения аббревиатуры. Идея в том, что вы вставляете сокращение, а затем с помощью атрибута title показываете его полную расшифровку.<p>Без <abbr title="Cascading Style Sheets">CSS</abbr> любая HTML-страница будет выглядеть как простой текстовый документ из 90-х.</p>
Проблема в том, что
<abbr> — не интерактивный элемент. На него нельзя переключиться по табуляции. Он будет прочитан точно так же, как любое другое слово в предложении. Если навести мышь на элемент, вы увидите подсказку title. Но если вы используете клавиатуру — нет никакого способа её отобразить.Далее, скринридеры. Большинство скринридеров не озвучивают атрибут
title.Гораздо лучше вернуться к старому газетному стилю: в первый раз напишите полную фразу, а затем в скобках — аббревиатуру. После этого можете использовать только сокращение.
#a11y #HTML
👌4
Практическое руководство по элементу
Смещение контента при загрузке страницы, избыточный трафик на мобильных устройствах, потерянные баллы Core Web Vitals — всё это часто следствие недооценки возможностей элемента
В новом руководстве рассматриваются ключевые аспекты работы с изображениями в HTML:
✅ указание
✅ адаптивность через
✅ поддержка современных форматов (AVIF, WebP) с помощью
✅ управление приоритетами загрузки:
✅ стратегия для LCP с предварительной загрузкой адаптивных изображений.
В финале — сравнение ручного подхода и использования Image CDN с акцентом на практическую целесообразность.
🖥 Читать статью
📱 @dev_notes_ru
#HTML #LCP #CoreWebVitals
<img>: от основ до LCPСмещение контента при загрузке страницы, избыточный трафик на мобильных устройствах, потерянные баллы Core Web Vitals — всё это часто следствие недооценки возможностей элемента
<img>.В новом руководстве рассматриваются ключевые аспекты работы с изображениями в HTML:
width и height для предотвращения смещения макета (CLS);srcset и sizes — как браузер выбирает нужный размер;<picture>;loading, decoding, fetchpriority;В финале — сравнение ручного подхода и использования Image CDN с акцентом на практическую целесообразность.
#HTML #LCP #CoreWebVitals
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1