Заметки разработчика
462 subscribers
738 photos
4 videos
1.22K links
Заметки о Frontend, Backend и немного DevOps. В основном о #PHP, #Laravel, #JavaScript, #HTML, #CSS, тестировании и настройке серверов.

https://www.dev-notes.ru

@snakenf
Download Telegram
⚙️ PHP 8.5: Новая константа PHP_BUILD_DATE

В PHP 8.5 появилась константа PHP_BUILD_DATE, которая хранит дату и время сборки PHP-бинарного файла. Ранее эту информацию можно было получить только через phpinfo(), что было неудобно из-за необходимости парсить вывод функции. Теперь данные доступны напрямую в удобном формате.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
‼️ PHP 8.5: Отказ от устаревших приведений типов (boolean, double, integer, binary)

В PHP 8.5 типы (boolean), (double), (integer) и (binary) объявлены устаревшими: при использовании этих типов теперь выводятся предупреждения E_DEPRECATED. Эти альтернативные имена использовались параллельно с каноническими (bool), (float), (int) и (string), но в PHP 9.0 они будут удалены. Рассмотрим, почему принято такое решение, как это затронет ваш код и как подготовиться к переходу.

Пример проблемного кода:
<?php

function test(integer $value): double {}
// Warning: "double" will be interpreted as a class name...


🛠 С PHP 8.5 нужно обновить код:
(integer)(int)
(double)(float)
(boolean)(bool)
(binary)(string)

Иначе будут предупреждения E_DEPRECATED, а в PHP 9.0 — ошибки!

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Deprecated #Deprecation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
‼️ PHP 8.5: Функция mysqli_execute объявлена устаревшей

В PHP 8.5 функция mysqli_execute объявлена устаревшей. Узнайте, как правильно заменить её на mysqli_stmt_execute и обеспечить совместимость кода с будущими версиями PHP.

Что делать?

Заменить на mysqli_stmt_execute — обратно совместимо
Или использовать mysqli_execute_query для PHP 8.2+

В статье:

Причины объявления mysqli_execute устаревшей
Конкретные примеры замены кода
Пошаговый план миграции
Ответы на частые вопросы

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Deprecated #Deprecation
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 Обновлена статья по работе с NULL в SQL!

Актуализирован материал, посвящённый работе с NULL в SQL — от основ до продвинутых функций и лучших практик.

Что нового:

Подробнее про COALESCE, IFNULL и NULLIF с примерами
Особенности NULL в JOIN и агрегирующих функциях
Рекомендации по проектированию и оптимизации запросов

🖥 Читать статью

📱 @dev_notes_ru

#SQL #NULL #COALESCE
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
🚀 PHP 8.5: `curl_close()` и `curl_share_close()` объявлены устаревшими

Если ваши логи в PHP 8.5 заполонили предупреждения об устаревании curl_close() — не игнорируйте их. Это не просто формальность. Эти функции стали полностью бесполезными ещё с PHP 8.0, и их вызов теперь — лишь шум в логах.

Всё потому, что в PHP 8.0 cURL-дескрипторы превратились в полноценные объекты, которыми теперь управляет сборщик мусора. А в PHP 8.5 от этих пустых функций-«пустышек» окончательно решили избавиться.

📌 Что нужно знать:
Замените curl_close() на unset($ch)
Для совместимости с PHP < 8.0 используйте условные проверки
curl_multi_close() остаётся рабочей

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #cURL
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 PHP 8.5: Функция xml_parser_free объявлена устаревшей

С выходом PHP 8.5 ещё один устаревший элемент покидает язык — функция xml_parser_free() теперь помечена как deprecated. Это логичное продолжение перехода от ресурсов к объектам, начатого в PHP 8.0, где XML-парсер стал объектом и не требует ручного освобождения.

В статье разбирается:

Почему функция перестала быть нужной
Как правильно удалить её вызовы без нарушения обратной совместимости
Какие альтернативные подходы использовать в legacy-проектах

Если вы работаете с XML-парсингом в PHP, рекомендуем ознакомиться с материалом для обновления вашего кодовой базы.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #XMLParser
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 PHP 8.5: Функция socket_set_timeout объявлена устаревшей

В PHP 8.5 функция socket_set_timeout официально объявлена устаревшей (deprecated).

Не волнуйтесь, замена простая и прямая — используйте stream_set_timeout. Параметры и поведение идентичны, обратная совместимость полная.

Что нужно сделать?
Найти в коде все socket_set_timeout (через grep или IDE)
Заменить на stream_set_timeout
Избавиться от будущих предупреждений

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 PHP 8.5: Вывод из обработчиков буфера вывода объявлен устаревшим

Начиная с PHP 8.5 вывод из обработчиков буфера вывода объявлен устаревшим. При обнаружении вывода из обработчика PHP сгенерирует предупреждение E_DEPRECATED, хотя сам вывод по-прежнему будет подавлен. В PHP 9.0 это приведёт к фатальной ошибке (Fatal Error), что прервёт выполнение скрипта.

Что делать?

Проверить все обработчики на наличие echo, print или `include`содержащих вывод
Весь вывод формировать через возвращаемую строку
При необходимости использовать внутреннюю буферизацию (ob_start внутри обработчика)

Подробное руководство по аудиту и рефакторингу с живыми примерами — в статье.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
🚀 PHP 8.5: Все константы MHASH_* объявлены устаревшими

Знакомы с функциями mhash() и константами вроде MHASH_SHA1? В PHP 8.5 они окончательно помечены как устаревшие. Что это значит для ваших проектов? 👇

• Все константы MHASH_* теперь выводят предупреждение об устаревании.
• Прямая таблица замен на строковые алгоритмы для hash().
• Инструменты для автоматической миграции: PHPStan, Rector.

Пора обновлять код, пока изменения не стали критичными.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85 #Hash #MHash #Deprecated
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 PHP 8.5: CLI/CGI: Удалён параметр -z / --zend-extension

PHP 8.5 оба параметра -z и --zend-extension окончательно удалены. Это изменение — финальный шаг в устранении давно сломанной функциональности: опция -z не работала корректно для загрузки Zend-расширений как минимум на протяжении последних нескольких основных релизов PHP (например, в ветках 8.x и 7.x), а её реализация в CLI/CGI SAPI всегда была неполноценной.

• Опция -z была сломана годами и окончательно удалена в PHP 8.5.
• Если она использовалась формально — просто удалите её.
• Если нужно загрузить расширение — используйте -d zend_extension=....

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP85
Please open Telegram to view this post
VIEW IN TELEGRAM
1👍1
👩‍💻 Хуки свойств в Laravel 12: Прощай, `getFullNameAttribute()`

10 лет мы использовали геттеры и сеттеры в виде методов, мирясь с ограничениями автодополнения в IDE. С выходом PHP 8.4 и Laravel 12 появился более элегантный и строгий способ — хуки свойств (Property Hooks).

Теперь логику можно описывать прямо в теле свойства:

public string $fullName {
get => "{$this->first_name} {$this->last_name}";
set(string $value) => [
$this->first_name,
$this->last_name
] = explode(' ', $value, 2);
}


Ключевые преимущества


Встроенная типизация. Явное указание типа `string` гарантирует безопасность на уровне языка. Больше не нужны `@property`-аннотации для подсказок IDE.
Идеальное автодополнение. Свойства «видны» с первого обращения, IDE понимает их структуру без дополнительных плагинов.
Чистота моделей. Код становится декларативным и компактным, логика сосредоточена в одном месте.
Прозрачность. Меньше «магии» фреймворка — проще читать и отлаживать.

Идеальные сценарии для использования


Виртуальные (вычисляемые) атрибуты: `full_name`, `formatted_price`, `is_published`.
Мгновенная нормализация данных: приведение к нижнему регистру, триммирование пробелов при записи.
Простые вычисления без кэширования: когда нет необходимости хранить результат в БД.

⚠️ Важно: Класс `Attribute` и метод `Attribute::make()` остаются для сложных сценариев с кэшированием, зависимостями и т.п. Но для большинства простых преобразований хуки свойств — более прямой и производительный выбор.

Итог


2026 год на дворе. Пора писать модели на современном PHP, используя его синтаксис, а не обходные пути ранних версий Laravel.

📱 @dev_notes_ru

#PHP #Laravel #PropertyHooks
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
👩‍💻 Arr::onlyValues() & exceptValues() — фильтрация по значениям в Laravel 12.46

Хелперы Arr::only() и Arr::except() отлично фильтруют массивы по ключам. А что, если нужно отфильтровать именно по значениям?

Раньше приходилось комбинировать array_filter() с in_array() и писать callback-функции. В Laravel 12.46.0 появились два новых метода, которые делают это декларативно.

Arr::onlyValues() — оставляет только совпадающие значения:

$roles = ['admin', 'editor', 'viewer', 'guest'];
Arr::onlyValues($roles, ['admin', 'editor']);
// Результат: [0 => 'admin', 1 => 'editor']


Arr::exceptValues() — удаляет указанные значения:

$statuses = ['pending', 'completed', 'failed', 'shipped'];
Arr::exceptValues($statuses, ['failed', 'completed']);
// Результат: [0 => 'pending', 3 => 'shipped'] (ключи сохраняются!)


Строгий режим для смешанных типов:
Необязательный третий параметр strict: true включает проверку типа (===).

$mixed = [1, '1', 2, '2', 3];
Arr::onlyValues($mixed, [1, 2, 3], strict: true);
// Результат: [0 => 1, 2 => 2, 4 => 3] (только integer)


Где это удобно?
→ Фильтрация списков: статусы, роли, категории.
→ Очистка ввода: разрешённые/запрещённые значения.
→ Работа с конфигурациями и перечислениями (enum-like arrays).

Небольшое, но очень приятное дополнение для более чистого и выразительного кода.

📱 @dev_notes_ru

#PHP #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
🚀 Laravel 12.46.0: Разбор ранних январских новинок

Laravel начинает 2026 год не сбавляя темпа! Вышли версии 12.45.1, 12.45.2 и главная звезда — 12.46.0. Это не просто исправления багов, а новые мощные инструменты для работы с массивами, коллекциями и авторизацией.

Давайте разберем нововведения, чтобы вы могли сразу применять их в своих проектах. Все изменения обратно совместимы.

Новые методы фильтрации массивов по значению

Одна из частых задач — отфильтровать массив, оставив или удалив конкретные значения. Раньше приходилось писать циклы или использовать array_filter. Теперь в хелперах Illuminate\Support\Arr есть два новых метода, делающих это в одну строку.

➡️ Arr::onlyValues()
Оставляет в массиве только элементы с указанными значениями.
use Illuminate\Support\Arr;

$roles = ['admin', 'editor', 'viewer', 'guest'];
$allowedRoles = Arr::onlyValues($roles, ['admin', 'editor']);
// Результат: [0 => 'admin', 1 => 'editor']


➡️ Arr::exceptValues()
Делает обратное — удаляет элементы с указанными значениями.
$statuses = ['pending', 'completed', 'failed', 'shipped'];
$activeStatuses = Arr::exceptValues($statuses, ['failed', 'completed']);
// Результат: [0 => 'pending', 3 => 'shipped']


🔥 Важный нюанс: Оба метода поддерживают строгое сравнение типов через третий параметр strict: true. Это спасет от коварных багов.

$mixedValues = [1, '1', 2, '2', 3];
$integers = Arr::onlyValues($mixedValues, [1, 2, 3], strict: true);
// Результат: [0 => 1, 2 => 2, 4 => 3] (строка '1' не попала!)

Идеально для: фильтрации конфигов, очистки статусов, санации данных из форм.

📦 Умная проверка коллекций: containsManyItems()

Работа с коллекциями стала выразительнее. Новый метод containsManyItems() дополняет существующий containsOneItem() и проверяет, содержит ли коллекция более одного элемента.

Простая проверка:
collect([1, 2])->containsManyItems(); // true
collect([1])->containsManyItems(); // false


Мощь в callback-функции: Метод может проверить, удовлетворяют ли условию более одного элемента.
$users = collect([
['name' => 'John', 'role' => 'admin'],
['name' => 'Jane', 'role' => 'editor'],
['name' => 'Bob', 'role' => 'admin'],
]);

$hasMultipleAdmins = $users->containsManyItems(fn($user) => $user['role'] === 'admin');
// Результат: true (админов больше одного)

Сценарий использования: Валидация, где нужно убедиться, что пользователь выбрал хотя бы два варианта. Метод эффективен и прекращает работу, как находит второй подходящий элемент.

🛡 Типобезопасная авторизация с Enum в Gate

Метод has() фасада Gate теперь может принимать любые Enum (UnitEnum), а не только строки или BackedEnum.

Раньше проверка существования правила была только по строке:
if (Gate::has('view-dashboard')) {
// Правило существует
}


Теперь можно использовать чистые Enum для типобезопасности:
enum Abilities {
case VIEW_DASHBOARD;
case EDIT_POST;
}

Gate::define(Abilities::VIEW_DASHBOARD, fn($user) => $user->isAdmin());

if (Gate::has(Abilities::VIEW_DASHBOARD)) { // Работает с UnitEnum!
// Проверка прошла
}


Практическая польза: Это открывает возможности для динамической регистрации прав и элегантной организации кода авторизации.

🛠 Исправления и улучшения под капотом

Каждый минорный релиз несет важные стабилизирующие правки:

- 12.45.1: Исправлена работа ResourceCollection при передаче простого массива вместо коллекции моделей.
-12.45.2: Починены методы Validator::appendRules() и toArray() для AnonymousResourceCollection.
- 12.46.0: Исправлено клонирование подключений к БД с префиксом таблиц и добавлены опции блокировок DDL для MySQL.

💎 Итог: Что это значит

1. Меньше шаблонов: Фильтрация массивов и проверка коллекций теперь в одну строку.
2. Более надежный код: Строгая типизация в хелперах и использование Enum в Gate предотвращают целый класс ошибок.
3. Современный стек: Фреймворк продолжает интегрировать лучшие практики и возможности PHP.

Обновление простое и безопасное: composer update laravel/framework.

Changelog:  v12.46.0,  v12.45.2v12.45.1.

📱 @dev_notes_ru

#Laravel #Laravel12 #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
👩‍💻 👩‍💻 Генерируемые столбцы и SQL-представления: использование в Laravel

Знакомо чувство, когда сложный отчёт в админке загружается по 10 секунд, а пагинация с вычисляемыми полями ломается?

Часто проблема не в коде, а в подходе: мы пытаемся в PHP делать то, что СУБД выполнит в сотни раз быстрее. В новой статье разбираем, как заставить базу данных работать на полную:

Генерируемые столбцы: когда они заменяют аксессоры и как с их помощью индексировать вычисляемые поля.
SQL-представления: как создавать виртуальные таблицы для сложных отчётов и избегать дублирования кода.
Практические кейсы: ускорение сортировки по марже прибыли и создание ежедневных отчётов без таймаутов.

Всё — с кодом, миграциями и замером производительности. Переносим логику из PHP в SQL и получаем прирост скорости в 5–10 раз. 🚀

🖥 Читать статью

📱 @dev_notes_ru

#Laravel #MySQL #PHP #Database
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
🚀 Частичное применение функций появится в PHP 8.6

Знакомо чувство, когда половина кода — это однотипные стрелочные функции, которые лишь фиксируют аргументы? В PHP 8.6 эту проблему решает частичное применение функций (PFA). Теперь можно создавать специализированные callback’ы в одну строку, используя заполнители ? и .

🔹 Как заменить fn($s) => str_replace(‘hello’, ‘hi’, $s) на str_replace(‘hello’, ‘hi’, ?)
🔹 Работа с именованными и вариативными аргументами
🔹 Практические примеры для фильтрации, конвейеров и HTTP-обработчиков

Это не просто синтаксический сахар — это способ писать лаконичнее и выразительнее.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PHP86
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🚀 Laravel v12.47.0 вышел!

В этом релизе есть как интересные нововведения, так и важные исправления, улучшающие стабильность и опыт разработки. Вот главное:

🌟 Новые возможности

@includeIsolated для Blade: Новая директива для безопасного рендеринга Blade-включений в изолированном контексте. Идеально для шаблонов, которые не должны наследовать или изменять переменные родительской области видимости.

Cache::withoutOverlapping(): Удобный метод для предотвращения одновременного выполнения задач. Внутри он использует Cache::lock()->block(), упрощая работу с блокировками.

Enum-ключи в Session Store: Теперь в методах get, has и put хранилища сессий можно использовать Enum-ключи, что улучшает типизацию и читаемость кода.

Macroable Notifications: Класс Illuminate\Support\Facades\Notification стал макро-определяемым (Macroable), позволяя гибко расширять его функциональность.

⚡️ Улучшения и исправления

Кэш и очередь: События CacheFailedOver и QueueFailedOver теперь срабатывают только при первом сбое (#58330), предотвращая дублирование логов.

Обработка исключений: Исправлена ошибка, из-за которой QueryException показывала неверные детали подключения для PDO в режиме чтения (#58331).

Валидация в прекогнитивных запросах: Теперь они поддерживают использование подстановочных знаков (wildcards) вместе с валидацией массивов (#57486).

JSON API Resources: Устранено дублирование при обработке циклических ссылок (#58348).

Пакетная обработка задач: Метод Bus::batch теперь корректно фильтрует пустые (falsy) элементы из переданного массива (#58360).

Типы данных: Улучшены аннотации типов для вспомогательных методов Number::with*() (#58358) и Str (#58356), а также для TableGuesser::guess() (#58354).

🛠 Прочие изменения

Улучшено сообщение об ошибке команды php artisan key:generate, когда APP_KEY уже установлен (#58345).

В stub для миграции таблицы failed_jobs добавлены индексы (#58355).

Разрешено использование Enum в методе PendingBatch::onConnection (#58350).

Это обновление — шаг к более безопасному, типизированному и предсказуемому фреймворку. Полный список коммитов смотрите в истории на GitHub. Обновляйтесь и пользуйтесь новыми возможностями!

📱 @dev_notes_ru

#Laravel #Laravel12 #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
🕐 PSR-20 Clock: Тестируемое время в PHP

Знакомо, когда unit-тест нестабилен из-за «плавающего» времени? В основе таких багов — прямая зависимость от системных часов. Пора перестать быть заложником времени и начать им управлять.

В новой статье детально разобрали, как PSR-20 Clock решает эту проблему:
Показываем, как превратить время в явную и контролируемую зависимость.
Объясняем разницу между SystemClock, MockClock и MonotonicClock.
Даём пошаговый алгоритм внедрения в Symfony, Laravel и чистый PHP.

Это не просто новый интерфейс, а смена парадигмы для написания надёжного кода.

🖥 Читать статью

📱 @dev_notes_ru

#PHP #PSR
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
👩‍💻 Вышел Firefox 147: Полный разбор релиза для разработчиков

Новый выпуск Firefox — это не просто набор обновлений, а настоящий прорыв в инструментах для веб-разработки. Основные нововведения: CSS Anchor Positioning по умолчанию, мощный Navigation API и расширенные возможности View Transitions. Давайте разберем все детали.

🚀 Главные новинки: CSS Anchor Positioning

CSS Anchor Positioning (якорное позиционирование) — это настоящая революция в CSS. Теперь можно «привязывать» один элемент (например, тултип или выпадающее меню) к другому (якорю) прямо в CSS, без JavaScript, создавая отзывчивые интерфейсы.

Что теперь можно в Firefox 147:

Включено по умолчанию! Больше никаких флагов.

Значение anchor-center: Новое, удобное значение для свойств align-self, justify-self и других, чтобы центрировать элемент относительно его якоря.
position-anchor: none: Новое значение для отвязки элемента от якоря.
Интеграция с Инструментами разработчика: Элементы с anchor-name получают значок «якоря» в DOM-обозревателе, а @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, а анимации — в панели анимаций.

💎 Другие важные улучшения

JavaScript: Iterator.concat() для объединения итераторов.
CSS: Поддержка -webkit-perspective для совместимости, новые единицы измерения (rcap, rch, rex, ric) на основе шрифта корневого элемента, свойства counter-* и quotes для ::marker.
API: WebGPU теперь для всех macOS на Apple Silicon, Brotli-сжатие в CompressionStream, CSS-модули (импорт стилей как CSSStyleSheet), Service Workers как ES-модули.
SVG: Поддержка медиа-фрагментов в URL для контроля анимации SMIL и отображения части изображения.
Для разработчиков расширений: Временно загруженные расширения MV3 могут загружать скрипты с localhost.
Для пользователей: Улучшение производительности видео для AMD GPU, поддержка XDG Base Directory в Linux, безопасность.

📈 Зачем все это нужно?

Firefox 147 — это не просто обновление, а серьезный шаг к более выразительной, производительной и простой в разработке веб-платформе. CSS Anchor Positioning обещает сократить объем пользовательского JavaScript для раскладки. Navigation API и View Transitions делают навигацию в SPA предсказуемой и кинематографичной. А WebGPU и другие API открывают двери для новых классов веб-приложений.

📱 @dev_notes_ru

#Firefox #WebDev #CSS #JavaScript #AnchorPositioning #ViewTransitions #NavigationAPI #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
👩‍💻 Автоматическая фильтрация в Laravel: сила Global Scopes

Для поддержания чистоты и единообразия запросов часто использую глобальные области видимости (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);


Примечательно, что при необходимости такую область видимости можно точечно отключить для конкретного запроса, сохраняя гибкость работы с данными.

📱 @dev_notes_ru

#Laravel #LaravelTips #PHP #Eloquent
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
🔄 Вышло обновление Angie 1.11.2!

Данный релиз содержит важные исправления ошибок и рекомендуется к установке для повышения стабильности работы.

📋 Основные исправления в версии 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/

📱 @dev_notes_ru

#Angie #WebServer #Nginx #Changelog #Обновление
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1