Знакомо чувство, когда сложный отчёт в админке загружается по 10 секунд, а пагинация с вычисляемыми полями ломается?
Часто проблема не в коде, а в подходе: мы пытаемся в PHP делать то, что СУБД выполнит в сотни раз быстрее. В новой статье разбираем, как заставить базу данных работать на полную:
Всё — с кодом, миграциями и замером производительности. Переносим логику из PHP в SQL и получаем прирост скорости в 5–10 раз.
#Laravel #MySQL #PHP #Database
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Знакомо чувство, когда половина кода — это однотипные стрелочные функции, которые лишь фиксируют аргументы? В PHP 8.6 эту проблему решает частичное применение функций (PFA). Теперь можно создавать специализированные callback’ы в одну строку, используя заполнители
? и ….🔹 Как заменить
fn($s) => str_replace(‘hello’, ‘hi’, $s) на str_replace(‘hello’, ‘hi’, ?)🔹 Работа с именованными и вариативными аргументами
🔹 Практические примеры для фильтрации, конвейеров и HTTP-обработчиков
Это не просто синтаксический сахар — это способ писать лаконичнее и выразительнее.
#PHP #PHP86
Please open Telegram to view this post
VIEW IN TELEGRAM
В этом релизе есть как интересные нововведения, так и важные исправления, улучшающие стабильность и опыт разработки. Вот главное:
@includeIsolated для Blade: Новая директива для безопасного рендеринга Blade-включений в изолированном контексте. Идеально для шаблонов, которые не должны наследовать или изменять переменные родительской области видимости.Cache::withoutOverlapping(): Удобный метод для предотвращения одновременного выполнения задач. Внутри он использует Cache::lock()->block(), упрощая работу с блокировками.get, has и put хранилища сессий можно использовать Enum-ключи, что улучшает типизацию и читаемость кода.Illuminate\Support\Facades\Notification стал макро-определяемым (Macroable), позволяя гибко расширять его функциональность.CacheFailedOver и QueueFailedOver теперь срабатывают только при первом сбое (#58330), предотвращая дублирование логов.QueryException показывала неверные детали подключения для PDO в режиме чтения (#58331).Bus::batch теперь корректно фильтрует пустые (falsy) элементы из переданного массива (#58360).Number::with*() (#58358) и Str (#58356), а также для TableGuesser::guess() (#58354).🛠 Прочие изменения
php artisan key:generate, когда APP_KEY уже установлен (#58345).failed_jobs добавлены индексы (#58355).PendingBatch::onConnection (#58350).Это обновление — шаг к более безопасному, типизированному и предсказуемому фреймворку. Полный список коммитов смотрите в истории на GitHub. Обновляйтесь и пользуйтесь новыми возможностями!
#Laravel #Laravel12 #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release v12.47.0 · laravel/framework
[12.x] Add @includeIsolated directive for isolated Blade includes by @KennedyTedesco in #58311
[12.x] Fix typo in JsonApiResource trait method by @dxnter in #58326
[12.x] Add Cache::withoutOverlapp...
[12.x] Fix typo in JsonApiResource trait method by @dxnter in #58326
[12.x] Add Cache::withoutOverlapp...
🕐 PSR-20 Clock: Тестируемое время в PHP
Знакомо, когда unit-тест нестабилен из-за «плавающего» времени? В основе таких багов — прямая зависимость от системных часов. Пора перестать быть заложником времени и начать им управлять.
В новой статье детально разобрали, как PSR-20 Clock решает эту проблему:
✅ Показываем, как превратить время в явную и контролируемую зависимость.
✅ Объясняем разницу между
✅ Даём пошаговый алгоритм внедрения в Symfony, Laravel и чистый PHP.
Это не просто новый интерфейс, а смена парадигмы для написания надёжного кода.
🖥 Читать статью
📱 @dev_notes_ru
#PHP #PSR
Знакомо, когда unit-тест нестабилен из-за «плавающего» времени? В основе таких багов — прямая зависимость от системных часов. Пора перестать быть заложником времени и начать им управлять.
В новой статье детально разобрали, как PSR-20 Clock решает эту проблему:
SystemClock, MockClock и MonotonicClock.Это не просто новый интерфейс, а смена парадигмы для написания надёжного кода.
#PHP #PSR
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Новый выпуск Firefox — это не просто набор обновлений, а настоящий прорыв в инструментах для веб-разработки. Основные нововведения: CSS Anchor Positioning по умолчанию, мощный Navigation API и расширенные возможности View Transitions. Давайте разберем все детали.
CSS Anchor Positioning (якорное позиционирование) — это настоящая революция в CSS. Теперь можно «привязывать» один элемент (например, тултип или выпадающее меню) к другому (якорю) прямо в CSS, без JavaScript, создавая отзывчивые интерфейсы.
Что теперь можно в Firefox 147:
Включено по умолчанию! Больше никаких флагов.
anchor-center: Новое, удобное значение для свойств align-self, justify-self и других, чтобы центрировать элемент относительно его якоря.position-anchor: none: Новое значение для отвязки элемента от якоря.@position-try правила отображаются в панели CSS.Практический пример создания тултипа:
/* 1. Объявляем якорь (кнопка) */
.button {
anchor-name: --tooltip-anchor;
}
/* 2. Создаем и привязываем тултип */
.tooltip {
position: absolute;
position-anchor: --tooltip-anchor; /* Связываем с кнопкой */
bottom: anchor(top); /* Размещаем тултип над кнопкой */
left: anchor(center); /* Центрируем по горизонтали */
translate: -50% 0; /* Точная центровка */
}
Преимущество: такой тултип автоматически адаптируется к прокрутке и границам экрана.
🛠 Улучшения для SPA: Navigation API и View Transitions
Firefox 147 делает разработку одностраничных приложений (SPA) значительно удобнее.
⚡️ Navigation API — новый стандарт для управления навигацией.
Позволяет перехватывать навигационные действия, управлять историей браузера и получать информацию о записях в истории. Он призван заменить History API и
window.location, устраняя их недостатки. Подробнее об API можно узнать в полной спецификации на MDN.🎭 View Transitions (Типы переходов)
API для плавных анимаций между состояниями страницы теперь поддерживает типы переходов (
types). Это позволяет задавать разные анимации для разных обновлений контента (например, «переход вперед» и «переход назад»). Доступно свойство Document.activeViewTransition для получения активного перехода. Узнать больше можно в полном руководстве по View Transition API.Инструменты разработчика также получили улучшения для View Transitions: псевдоэлементы :
:view-transition теперь видны в DOM, а анимации — в панели анимаций.Iterator.concat() для объединения итераторов.-webkit-perspective для совместимости, новые единицы измерения (rcap, rch, rex, ric) на основе шрифта корневого элемента, свойства counter-* и quotes для ::marker.API: WebGPU теперь для всех macOS на Apple Silicon, Brotli-сжатие в CompressionStream, CSS-модули (импорт стилей как CSSStyleSheet), Service Workers как ES-модули.localhost.Firefox 147 — это не просто обновление, а серьезный шаг к более выразительной, производительной и простой в разработке веб-платформе. CSS Anchor Positioning обещает сократить объем пользовательского JavaScript для раскладки. Navigation API и View Transitions делают навигацию в SPA предсказуемой и кинематографичной. А WebGPU и другие API открывают двери для новых классов веб-приложений.
#Firefox #WebDev #CSS #JavaScript #AnchorPositioning #ViewTransitions #NavigationAPI #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Для поддержания чистоты и единообразия запросов часто использую глобальные области видимости (Global Scopes) в моделях. Например, в приложении может быть автоматическое исключение архивных записей компаний из всех выборок, что помогает избежать случайного обращения к неактивным данным.
// Создание области видимости для исключения архивных компаний
class ExcludeArchivedScope implements Scope
{
public function apply(Builder $builder, Model $model)
{
$builder->where(
'status', '<>',
CompanyStatusEnum::ARCHIVED->value
);
}
}
/*
Добавление `addGlobalScope()` к нужной модели. Этот метод используется для применения глобальной области видимости к модели. Это означает, что каждый раз при запросе к модели (например, через `Company::all()` или `Company::where(...)`), условия области видимости автоматически добавляются в конструктор запросов, фильтруя результаты без необходимости вручную добавлять их каждый раз.
*/
class Company extends BaseModel
{
protected static function booted()
{
static::addGlobalScope(new ExcludeArchivedScope());
}
}
// Временное отключение ВСЕХ областей видимости
Company::withoutGlobalScopes()->find($id);
// Временное отключение только области видимости
Company::withoutGlobalScope(ExcludeArchivedScope::class)->find($id);
Примечательно, что при необходимости такую область видимости можно точечно отключить для конкретного запроса, сохраняя гибкость работы с данными.
#Laravel #LaravelTips #PHP #Eloquent
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Данный релиз содержит важные исправления ошибок и рекомендуется к установке для повышения стабильности работы.
📋 Основные исправления в версии 1.11.2:
🔹 HTTP/3: Исправлена проблема, при которой HTTP/3-запросы могли завершаться с ошибкой
[alert] sendmsg() failed (90: Message too large) while sending frames, если был отключен BPF.🔹 IPv6 & HTTP/3: Решена проблема с приемом HTTP/3-запросов при прослушивании wildcard IPv6-адреса с включенным BPF.
🔹 Docker API: Исправлена работа динамического обновления групп проксируемых серверов при указании доменного имени в директиве docker_endpoint.
🔹 Модули: Обновлен модуль angie-module-cache-purge до версии 2.5.5.
Это второе обновление в ветке 1.11.x. Предыдущий выпуск 1.11.1 от 30 декабря 2025 года также принес ряд улучшений и исправлений, включая корректный учет HTTP/2-запросов в статистике и исправление проблемы с ACME-клиентом в API статистики.
💡 Полезные ссылки:
Полный список изменений (changelog) для всех версий: https://angie.software/angie/docs/oss_changes/
Документация по настройке модуля Metric для сбора произвольной статистики (добавлен в версии 1.11.0): https://angie.software/angie/docs/http/ngx_http_metric_module/
#Angie #WebServer #Nginx #Changelog #Обновление
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
Обновлено руководство по диагностике и устранению ошибки 503 Service Temporarily Unavailable в Nginx. Материал был дополнен детальными конфигурациями, алгоритмами поиска причин и методами повышения отказоустойчивости инфраструктуры.
В статье представлен структурированный подход: от экспресс-чек-листа для оперативного реагирования до настройки балансировки нагрузки, пассивных health checks и планирования масштабирования. Рассмотрены типичные сценарии возникновения ошибки, анализ логов и корректировка ключевых параметров, таких как
proxy_read_timeout и max_fails.Руководство призвано помочь системным администраторам и разработчикам не только устранять инциденты, но и выстраивать профилактические механизмы для стабильной работы сервисов.
#Nginx #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2
Please open Telegram to view this post
VIEW IN TELEGRAM
Vinyl и vinyl-fs: сквозные потоки в GulpПока инструменты вроде Vite решают задачи сборки фронтенда «из коробки», Gulp нашёл свою нишу как гибкая платформа для автоматизации на основе потоков файлов. В новой статье мы исследуем его ядро — объект
Vinyl и модуль vinyl-fs.Вы узнаете:
▸ Как виртуальный файловый формат
Vinyl абстрагирует работу с файлами.▸ Почему функция
gulp.src() — это интерфейс к vinyl-fs.▸ На каких современных паттернах строится управление потоками вместо устаревшего
passthrough.▸ Как применять эти знания на практике: сборка JS-проектов, генерация контента, оптимизация ресурсов.
Статья поможет понять архитектурные принципы, которые превращают Gulp в конструктор для сложной автоматизации, где важна не только сборка, но и многоэтапная обработка гетерогенных данных.
#Gulp #NodeJS
Please open Telegram to view this post
VIEW IN TELEGRAM