В Pull Request #58379 для ветки 12.x было добавлено полезное улучшение в HTTP-клиент Laravel. Теперь в объекте
💡 В чём суть
Раньше метод
Тихие ошибки:
Потеря данных: PHP может некорректно обрабатывать очень большие числа (например,
Как теперь можно решить
В метод
❗️ Сценарии использования
✅ Защита от потери больших чисел (часто встречается в платежных системах и соц. сетях):
✅ Строгий режим для отладки:
При малейшей ошибке в JSON будет выброшено исключение, а не возвращён NULL.
✅ Комбинированный режим для продакшена:
И данные целы, и ошибки не пройдут незамеченными.
⚡️ Что изменилось для разработчика
Раньше для такого контроля нужно было вручную парсить
Небольшое изменение, которое устраняет целый класс проблем при интеграции с реальными, неидеальными API.
📱 @dev_notes_ru
#Laravel #Laravel12
Response можно устанавливать флаги для декодирования JSON.Раньше метод
$response->json() просто парсил JSON с настройками PHP по умолчанию. Это могло приводить к скрытым проблемам:Тихие ошибки:
json_decode() по умолчанию молча возвращает NULL при ошибке в структуре JSON, что усложняет отладку.Потеря данных: PHP может некорректно обрабатывать очень большие числа (например,
transaction_id или Snowflake ID из Discord/X), что ведёт к повреждению данных.Как теперь можно решить
В метод
json() добавлен параметр flags. Это позволяет передавать стандартные константы PHP для управления парсингом.$data = $response->json(flags: JSON_BIGINT_AS_STRING);
Большие целые числа будут возвращены как строки, что гарантирует их сохранность.
$data = $response->json(flags: JSON_THROW_ON_ERROR);
При малейшей ошибке в JSON будет выброшено исключение, а не возвращён NULL.
$data = $response->json(
flags: JSON_BIGINT_AS_STRING | JSON_THROW_ON_ERROR
);
И данные целы, и ошибки не пройдут незамеченными.
Раньше для такого контроля нужно было вручную парсить
$response->body(). Теперь всё решается одним параметром встроенного метода.Небольшое изменение, которое устраняет целый класс проблем при интеграции с реальными, неидеальными API.
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
[12.x] Allow setting flags for decoding json in the Http Client's Response by cosmastech · Pull Request #58379 · laravel/framework
I really want to be able to specify that when I'm parsing JSON from a response, it should throw when receiving invalid JSON.
How to use
Call-site
$response = Http::get('https://some...
How to use
Call-site
$response = Http::get('https://some...
🔥2
Symbol.iteratorЧто, если ваш объект мог бы быть и структурой с понятными свойствами, и коллекцией для мгновенного разворачивания через
...? Оказывается, в JavaScript это встроенная возможность через Symbol.iterator.В статье разбираем на конкретной задаче:
🔹 Как работает spread «под капотом» и почему
Map разворачивается парами.🔹 Решаем дилемму «объект или массив» — пишем утилиту, результат которой можно и читать как
fileInit.bytes, и подставить в new File(...fileInit).🔹 Плюсы, минусы и когда это реально нужно — чтобы не усложнять код без дела.
Инструмент мощный, но требует осмысленного применения.
#JavaScript #SymbolIterator #Symbol
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🤔1
Устали выбирать между быстрой первой загрузкой и моментальными переходами по сайту? Словари сжатия в HTTP/3 решают эту проблему, сокращая объём передаваемых CSS до минимума.
В статье разбираем:
🔹 Как технология устраняет дублирование кода
🔹 Пошаговая настройка
🔹 Стратегия внедрения с fallback для всех браузеров
Это не теория — метод уже работает в Chromium и готов к использованию в production.
#DevOps #CSS
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🤔1
Работаете над фичей, но срочно нужен хотфикс? Не хотите терять контекст и грязные файлы?
🚀 Git Worktree создаёт изолированные рабочие директории для параллельной работы над разными ветками! Теперь можно:
✅ Вносить срочные исправления, не трогая основную ветку
✅ Работать над несколькими задачами одновременно
✅ Экспериментировать без риска для продакшена
✅ Тестировать PR и чужие ветки в чистом окружении
📖 В статье:
🔹 Как создать, переместить и удалить рабочее дерево
🔹 Архитектура и принципы работы
🔹 Когда использовать (а когда не стоит)
🔹 Сравнение с
git stash и clone🔹 Ответы на частые вопросы
#Git #Worktree
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
Вышло очередное обновление фреймворка — версия 12.49.0. Как всегда, релиз нацелен на стабильность, исправление ошибок и добавление небольших, но полезных улучшений в различные компоненты системы.
🛠 Исправления ошибок и улучшения
simplePaginate() в связке с withQueryString().queue:prune-batches — теперь корректно удаляются устаревшие записи в таблице job_batches.mimetypes теперь корректно обрабатывает файлы без расширения.BelongsToMany отношениях.channel() в маршрутах.Queue::extend().Paginator: В Paginator добавлен метод appendsQueryString(), позволяющий тонко управлять параметрами строки запроса.Pipeline, Conditionable, ValidatedInput.JobProcessing, JobProcessed, JobFailed для улучшенного мониторинга очередей через Horizon.TestResponse добавлены методы assertSessionHasErrorsIn() и assertSessionDoesntHaveErrorsIn() для точной проверки ошибок по ключам.make:model появилась опция --pivot для быстрого создания моделей сводных таблиц.HttpClient, DatabaseManager, BladeCompiler.Полный список изменений можно найти в официальном релизе
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release v12.49.0 · laravel/framework
[12.x] Clean up compiled views after parallel testing by @dxnter in #58440
[12.x] Support "where subquery between columns" by @gdebrauwer in #58441
[12.x] Use searchable prompt for db:tab...
[12.x] Support "where subquery between columns" by @gdebrauwer in #58441
[12.x] Use searchable prompt for db:tab...
❤2🔥1
А вы знали, что можно получить все преимущества TypeScript, оставаясь в рамках чистого JavaScript? Всё благодаря JSDoc — системе типизации, которая работает через комментарии. В обновлённой статье:
Этот подход идеален для легаси-проектов, скриптов и случаев, где важна скорость разработки без настройки сборки. Обновление делает материал ещё более прикладным.
#JavaScript #JSDoc #TypeScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥1
Используете JSDoc только для подсказок в редакторе? Тогда вы теряете главное: сквозную проверку типов от локальной разработки до продакшена.
В свежей статье рассматриваем профессиональную настройку системы типов через TypeScript Compiler:
🔹 Как за 5 минут включить проверку типов во всём проекте.
🔹 Автоматическая генерация
.d.ts файлов для ваших библиотек.🔹 Интеграция строгой проверки в CI/CD — код с ошибками не попадёт в main.
Это не хак, а легитимный подход для больших проектов. Если вы до сих пор просто ставите
// @ts-check и думаете, что это всё — вам сюда.#JavaScript #JSDoc #TypeScript
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1🔥1
location в Nginx: Полное руководство с примерамиЭффективная и безопасная конфигурация веб-сервера требует чёткого понимания принципов работы директивы location в Nginx. В новом материале представлено полное руководство, охватывающее ключевые аспекты:
root и aliasРуководство также актуально для пользователей Angie, сохраняя полную совместимость конфигураций.
#Nginx #Angie #location #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
matchMedia()Знаешь, как в JavaScript проверить, соответствует ли текущий viewport мобильному виду?
Не нужно городить
window.innerWidth и слушать resize вручную.Используй
matchMedia — тот же самый медиа-запрос, что и в CSS:const mq = matchMedia('(max-width: 550px)');
// Текущее состояние
console.log(mq.matches); // true / false
// Реагируем на изменения
mq.addEventListener('change', e => {
console.log('Мобильный?', e.matches);
});#JavaScript #CSS #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5🔥1
Вышла новая версия PHPStan 2.1.38
Этот релиз продолжает курс проекта на постоянное повышение производительности и приносит очередное значительное ускорение анализа.
🔥 Главная новость: еще быстрее!
Разработчикам удалось добиться еще 5–10% прироста скорости работы статического анализатора. Это улучшение — результат масштабной работы по оптимизации, которая ведется уже несколько релизов.
Основные изменения
Исправления ошибок:
✅ Исправлена обработка экранированного символа
✅ Устранена ошибка в определении типов (type inference) для замыканий (closures), связанная с сокращенными именами функций (Function Normalization and Shortening Rule, FNSR).
Улучшения:
✅ Убрано ограничение на версию PHP для правил, проверяющих атрибут
✅ Улучшен анализ для выражений с
✅ Улучшен вывод типов при сравнении результатов двух функций (
✅ Теперь
Оптимизация производительности (основная часть работы):
Большинство изменений в этом выпуске направлены на повышение скорости. Были оптимизированы:
✅ Наследование phpDoc-комментариев (теперь используется рефлексия).
✅ Работа с шаблонными типами (
✅ Логика в
✅ Кэширование результатов для предотвращения повторных вычислений.
Прочие правки:
✅ Исправление сигнатур функций.
✅ Внутренние улучшения кода и тесты.
Скачать обновление и увидеть все изменения можно как обычно на GitHub.
Обновляйтесь и наслаждайтесь еще более быстрым анализом кода! Если вы заметили какие-либо проблемы, сообщайте о них в трекере проекта.
📱 @dev_notes_ru
Этот релиз продолжает курс проекта на постоянное повышение производительности и приносит очередное значительное ускорение анализа.
🔥 Главная новость: еще быстрее!
Разработчикам удалось добиться еще 5–10% прироста скорости работы статического анализатора. Это улучшение — результат масштабной работы по оптимизации, которая ведется уже несколько релизов.
Основные изменения
Исправления ошибок:
# в регулярных выражениях в расширенном режиме.Улучшения:
#[\Override].New_ при использовании StaticMethodParameterClosureTypeExtension.FuncCall === FuncCall).array_merge() не теряет информацию о типах известных ключей (offset-types) массивов.Оптимизация производительности (основная часть работы):
Большинство изменений в этом выпуске направлены на повышение скорости. Были оптимизированы:
TemplateTypeHelper), постоянными массивами (ConstantArrayType) и пересечениями типов (IntersectionType).ImpossibleCheckTypeHelper, CombinationHelper и MutatingScope.Прочие правки:
Скачать обновление и увидеть все изменения можно как обычно на GitHub.
Обновляйтесь и наслаждайтесь еще более быстрым анализом кода! Если вы заметили какие-либо проблемы, сообщайте о них в трекере проекта.
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
Release 2.1.38 · phpstan/phpstan
This version brings another 5-10 % faster performance! 🏎️
Improvements 🔧
Remove PHP version constraint from the #[\Override] attribute rules (#4436), thanks @johnbillion!
OverridingPropertyRule - ...
Improvements 🔧
Remove PHP version constraint from the #[\Override] attribute rules (#4436), thanks @johnbillion!
OverridingPropertyRule - ...
👍2
Знаете, что чаще всего приводит к взлому Docker-контейнеров? Не 0-day уязвимости, а запуск от
root и забытые секреты в образах. В статье рассматривается 11 практических шагов для реального усиления безопасности:В статье — готовые примеры
Dockerfile, команды и контрольный список перед деплоем.#Docker #DevOps
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2🔥2
Устали вручную группировать массивы? Теперь это встроенная функция!
Object.groupBy() — ваш новый лучший друг для сортировки данных по любому строковому свойству.const tasks = [
{ description: 'Task 1', tag: 'Tag 1', project: 'Project A' },
{ description: 'Task 2', tag: 'Tag 1', project: 'Project B' },
{ description: 'Task 3', tag: 'Tag 2', project: 'Project A' },
];
const tasksByProject = Object.groupBy(tasks, (task) => task.project);
console.log(tasksByProject);
Результат:
{
'Project A': [
{ description: 'Task 1', tag: 'Tag 1', project: 'Project A' },
{ description: 'Task 3', tag: 'Tag 2', project: 'Project A' },
],
'Project B': [
{ description: 'Task 2', tag: 'Tag 1', project: 'Project B' },
]
}Для старых платформ доступен полифил через
core-js.🔑 Ключи любого типа: Если нужно использовать в качестве ключа не только строки, но и объекты, числа и другие типы — используйте
Map.groupBy().#JavaScript #WebDev #Frontend
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
В Laravel предложили стандартизировать PHP-атрибуты
Тейлор Отвелл выступил с инициативой сделать код Laravel более единообразным и современным. В рамках нового PR (Pull Request) предлагается повсеместно внедрить использование PHP 8 атрибутов в качестве основного способа конфигурации вместо свойств класса.
Что это значит?
Раньше для настройки, например, модели или задачи в очереди, использовались свойства класса (properties). Теперь для этого предлагаются нативные PHP-атрибуты, что делает код чище и современнее.
Что можно будет настраивать через атрибуты?
✅ Eloquent-модели:
✅ Задачи в очереди (Jobs):
✅ Консольные команды:
✅ Form Request, Resources, Factories и другие компоненты.
Важно: изменения не ломают обратную совместимость. Старый подход через свойства классов продолжит работать. Атрибуты предлагаются как современная, альтернативная опция.
Это предложение — важный шаг к единообразию кодовой базы Laravel и полноценному использованию возможностей PHP 8.
Attributes #58578
📱 @dev_notes_ru
#Laravel #PHP
Тейлор Отвелл выступил с инициативой сделать код Laravel более единообразным и современным. В рамках нового PR (Pull Request) предлагается повсеместно внедрить использование PHP 8 атрибутов в качестве основного способа конфигурации вместо свойств класса.
Что это значит?
Раньше для настройки, например, модели или задачи в очереди, использовались свойства класса (properties). Теперь для этого предлагаются нативные PHP-атрибуты, что делает код чище и современнее.
Что можно будет настраивать через атрибуты?
#[Table('users')], #[PrimaryKey('user_id')], #[Hidden(['password'])]#[Connection('redis')], #[Queue('podcasts')], #[Tries(3)]#[Signature('mail:send {user}')]Важно: изменения не ломают обратную совместимость. Старый подход через свойства классов продолжит работать. Атрибуты предлагаются как современная, альтернативная опция.
Это предложение — важный шаг к единообразию кодовой базы Laravel и полноценному использованию возможностей PHP 8.
Attributes #58578
#Laravel #PHP
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Ошибки безопасности VPS и как их исправить
Знаешь, сколько времени нужно ботам, чтобы начать атаковать новый сервер? Меньше минуты. А дальше — сотни попыток подбора паролей и сканирования портов.
Если ты администрируешь VPS, эта статья — обязательный минимум. Здесь нет теории, только конкретные шаги:
✅ Настройка SSH-ключей и запрет root-доступа
✅ Установка Fail2ban и фаервола UFW
✅ Настройка автономных бэкапов
Прочитай и закрой базовые векторы атак, которые используют 99% автоматических сканеров.
🖥 Читать статью
📱 @dev_notes_ru
#DevOps #Security
Знаешь, сколько времени нужно ботам, чтобы начать атаковать новый сервер? Меньше минуты. А дальше — сотни попыток подбора паролей и сканирования портов.
Если ты администрируешь VPS, эта статья — обязательный минимум. Здесь нет теории, только конкретные шаги:
Прочитай и закрой базовые векторы атак, которые используют 99% автоматических сканеров.
#DevOps #Security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥1
Семантическая диффузия
Термины со временем могут терять точность и размываться. Изначально четкое понятие обрастает трактовками, смягчается или упрощается для широкого употребления.
Это явление — семантическая диффузия.
Эрик Эванс описал её для DDD (Domain-Driven Design). Концепция "ограниченного контекста" стала трактоваться как просто модуль, а "вездесущий язык" — как глоссарий. Суть терминов теряется.
Рефакторинг тоже подвержен диффузии. Первоначальное определение — это контролируемое улучшение структуры кода без изменения поведения. Теперь же "рефакторингом" часто называют любое изменение кода, даже хаотичное и рискованное.
Создатели термина не могут контролировать его использование. Можно попытаться защитить определение через книги и статьи, но это лишь замедляет процесс.
Диффузия имеет два последствия:
1. Сложность общения. Без точных терминов сложно вести глубокие обсуждения.
2. Потеря полезных концепций. Ключевые идеи, стоящие за термином, забываются.
Полезный термин может быть утерян. Иногда его можно вернуть, настойчиво используя в первоначальном смысле и поправляя других. Иногда приходится находить новые слова для старой идеи (например, "рефакторинг (в оригинальном смысле)").
Важно помнить: когда термины становятся модными, их исходное значение часто размывается.
📱 @dev_notes_ru
Термины со временем могут терять точность и размываться. Изначально четкое понятие обрастает трактовками, смягчается или упрощается для широкого употребления.
Это явление — семантическая диффузия.
Эрик Эванс описал её для DDD (Domain-Driven Design). Концепция "ограниченного контекста" стала трактоваться как просто модуль, а "вездесущий язык" — как глоссарий. Суть терминов теряется.
Рефакторинг тоже подвержен диффузии. Первоначальное определение — это контролируемое улучшение структуры кода без изменения поведения. Теперь же "рефакторингом" часто называют любое изменение кода, даже хаотичное и рискованное.
Создатели термина не могут контролировать его использование. Можно попытаться защитить определение через книги и статьи, но это лишь замедляет процесс.
Диффузия имеет два последствия:
1. Сложность общения. Без точных терминов сложно вести глубокие обсуждения.
2. Потеря полезных концепций. Ключевые идеи, стоящие за термином, забываются.
Полезный термин может быть утерян. Иногда его можно вернуть, настойчиво используя в первоначальном смысле и поправляя других. Иногда приходится находить новые слова для старой идеи (например, "рефакторинг (в оригинальном смысле)").
Важно помнить: когда термины становятся модными, их исходное значение часто размывается.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Лицензионный аудит зависимостей
А вы знаете, что безобидная сторонняя библиотека может заставить открыть исходный код всего вашего SaaS? Лицензионные риски в PHP-зависимостях — это не юридическая абстракция, а реальная угроза проекту.
В новой статье разбираем:
• Как автоматически находить «опасные» лицензии (GPL, AGPL, SSPL)
• Готовый скрипт для интеграции проверки в GitHub Actions
• Пошаговый план внедрения политики за один день
🖥 Читать статью
📱 @dev_notes_ru
#PHP #License
А вы знаете, что безобидная сторонняя библиотека может заставить открыть исходный код всего вашего SaaS? Лицензионные риски в PHP-зависимостях — это не юридическая абстракция, а реальная угроза проекту.
В новой статье разбираем:
• Как автоматически находить «опасные» лицензии (GPL, AGPL, SSPL)
• Готовый скрипт для интеграции проверки в GitHub Actions
• Пошаговый план внедрения политики за один день
#PHP #License
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2👍1
Как автоматически генерировать сообщения коммитов с помощью Claude
Сообщения коммитов важны, но их написание — рутинная задача. Claude от Anthropic отлично справляется с их генерацией. Для автоматизации процесса можно использовать локальный скрипт.
Процесс работы
🔹 Скрипт получает изменения (
🔹 Дифф передается в API Claude (через Anthropic SDK) с запросом создать краткое, информативное сообщение коммита в conventional commits стиле.
🔹 Полученный ответ используется для выполнения коммита.
Пример скрипта на Python
Ключевые моменты
🔹 Используйте переменную окружения
🔹 Модель
🔹 Промт инструктирует Claude придерживаться формата conventional commits.
Процесс автоматизирует рутинную работу, оставляя пользователю финальный контроль.
Альтернативный подход: Husky + скрипт
Для запуска генерации перед каждым коммитом можно использовать хуки Git (например, через Husky).
🔹 Установите Husky:
🔹 Активируйте хуки:
🔹 Создайте хук
Использование Claude для генерации сообщений коммитов экономит время и улучшает их качество. Локальный скрипт или интеграция с хуками Git делают процесс seamless. Всегда проверяйте сгенерированные сообщения перед отправкой коммита.
📱 @dev_notes_ru
#Git #Commit
Сообщения коммитов важны, но их написание — рутинная задача. Claude от Anthropic отлично справляется с их генерацией. Для автоматизации процесса можно использовать локальный скрипт.
Процесс работы
🔹 Скрипт получает изменения (
git diff) для индексированных файлов.🔹 Дифф передается в API Claude (через Anthropic SDK) с запросом создать краткое, информативное сообщение коммита в conventional commits стиле.
🔹 Полученный ответ используется для выполнения коммита.
Пример скрипта на Python
import subprocess
import anthropic
import os
# 1. Получить дифф
diff_output = subprocess.run(
["git", "diff", "--cached"],
capture_output=True,
text=True
).stdout
# 2. Создать промт и отправить в Claude
client = anthropic.Anthropic(api_key=os.getenv("ANTHROPIC_API_KEY"))
message = client.messages.create(
model="claude-3-haiku-20240307",
max_tokens=100,
temperature=0,
system="Сгенерируй краткое, информативное сообщение коммита на основе git diff. Используй формат conventional commits (например, feat:, fix:, chore:).",
messages=[
{"role": "user", "content": f"Создай сообщение коммита для этого diff:\n\n{diff_output}"}
]
)
commit_message = message.content[0].text.strip()
# 3. Выполнить коммит
subprocess.run(["git", "commit", "-m", commit_message])
print(f"Коммит создан: {commit_message}")
Ключевые моменты
🔹 Используйте переменную окружения
ANTHROPIC_API_KEY.🔹 Модель
claude-3-haiku быстрая и недорогая для этой задачи.🔹 Промт инструктирует Claude придерживаться формата conventional commits.
Процесс автоматизирует рутинную работу, оставляя пользователю финальный контроль.
Альтернативный подход: Husky + скрипт
Для запуска генерации перед каждым коммитом можно использовать хуки Git (например, через Husky).
🔹 Установите Husky:
npm install husky --save-dev.🔹 Активируйте хуки:
npx husky install.🔹 Создайте хук
prepare-commit-msg:#!/bin/bash
# .husky/prepare-commit-msg
# Выполнить скрипт генерации и записать сообщение в файл
python generate_commit_message.py > "$1"
Использование Claude для генерации сообщений коммитов экономит время и улучшает их качество. Локальный скрипт или интеграция с хуками Git делают процесс seamless. Всегда проверяйте сгенерированные сообщения перед отправкой коммита.
#Git #Commit
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
Шпаргалка по Git: все команды для работы с ветками и репозиториями
Знаете, какая самая частая ошибка у тех, кто только начинает работать с Git? Не путать
Мы обновили нашу большую шпаргалку по Git — теперь там:
✅ Все основные и продвинутые команды с примерами
✅ Разделы по веткам, истории, удалённым репозиториям и работе в команде
✅ Ссылки на подробные статьи, если нужно глубже разобраться в теме
Сохраните себе в закладки — это тот файл, который спасёт вас в дедлайн.
🖥 Читать статью
📱 @dev_notes_ru
#Git #Сheatsheet #Шпаргалка
Знаете, какая самая частая ошибка у тех, кто только начинает работать с Git? Не путать
merge с rebase, а… просто не знать, как быстро откатить последний коммит или временно спрятать изменения.Мы обновили нашу большую шпаргалку по Git — теперь там:
✅ Все основные и продвинутые команды с примерами
✅ Разделы по веткам, истории, удалённым репозиториям и работе в команде
✅ Ссылки на подробные статьи, если нужно глубже разобраться в теме
Сохраните себе в закладки — это тот файл, который спасёт вас в дедлайн.
#Git #Сheatsheet #Шпаргалка
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1🔥1
Вышел Laravel 12.50.0
Отличные новости для Laravel-разработчиков! Вышел релиз Laravel 12.50.0 с несколькими важными улучшениями для повседневной работы. Вот главное, что нужно знать.
🚀 Ключевые изменения и новые возможности
Эти обновления добавят гибкости и надежности проектам.
🔹 Уникальные слушатели событий в очередях (#58402): Теперь вы можете избежать дублирования задач в очереди для слушателей событий, используя метод
🔹 Элегантное управление дополнениями (appends) у моделей (#58552): Появился новый метод
🔹 Enum-поддержка в кеше (#58616): Метод
🔹 Метод
🔹 Клонирование состояния в нотификациях (#58558): Исправлено поведение, гарантирующее, что каналы доставки (via), заданные динамически в методе
🛠 Улучшения и исправления
🔹 Сохранение ассоциативных ключей в отношениях (#58506): При eager loading отношений ассоциативные ключи родительской коллекции теперь сохраняются, что предотвращает неожиданную переиндексацию.
🔹 Использование
🔹 Улучшенные типы данных в коде (#58518, #58561, #58565, #58451): Продолжается работа над улучшением типизации в ядре фреймворка (хелпер
🔹 Безопасность и обслуживание: Внутренние зависимости обновлены для устранения уязвимости в PHPUnit (CVE) и других проблем совместимости (#58526, #58542, #58563).
⚙️ Прочие изменения
Релиз также содержит множество других правок, улучшающих стабильность, тестирование и взаимодействие с разработчиком: улучшения в компоненте
Что в итоге?
Laravel 12.50.0 — релиз, который приносит ценные практические улучшения (уникальные слушатели, управление appends, фиксы в отношениях) и продолжает курс на более строгую и предсказуемую кодовую базу. Обновление можно установить через
Полный список изменений можно найти в официальном релизе
📱 @dev_notes_ru
#Laravel #Laravel12
Отличные новости для Laravel-разработчиков! Вышел релиз Laravel 12.50.0 с несколькими важными улучшениями для повседневной работы. Вот главное, что нужно знать.
Эти обновления добавят гибкости и надежности проектам.
🔹 Уникальные слушатели событий в очередях (#58402): Теперь вы можете избежать дублирования задач в очереди для слушателей событий, используя метод
unique(): SendOrderShippedNotification::class)->unique()->onQueue('notifications') → SendOrderShippedNotification::class)->unique()->onQueue('notifications'). Это особенно полезно для частых событий, чтобы предотвратить накопление идентичных заданий.🔹 Элегантное управление дополнениями (appends) у моделей (#58552): Появился новый метод
withoutAppends() для временного отключения глобальных дополнений (accessors/appends) при сериализации модели: $user->withoutAppends()->toArray() → $user->withoutAppends()->toArray().🔹 Enum-поддержка в кеше (#58616): Метод
Cache::get() теперь корректно работает с массивом, содержащим enum-ключи, что упрощает работу с typed-кешированием.🔹 Метод
hasMany() для коллекций (#58550): У объектов Collection появился удобный метод hasMany() для проверки, содержит ли коллекция более одного указанного элемента.🔹 Клонирование состояния в нотификациях (#58558): Исправлено поведение, гарантирующее, что каналы доставки (via), заданные динамически в методе
via(), сохраняются при отправке уведомления через sendNow().🛠 Улучшения и исправления
🔹 Сохранение ассоциативных ключей в отношениях (#58506): При eager loading отношений ассоциативные ключи родительской коллекции теперь сохраняются, что предотвращает неожиданную переиндексацию.
🔹 Использование
morphMap при сериализации моделей (#58482): При сериализации идентификаторов модели в заданиях очереди теперь автоматически учитывается глобальный morphMap, обеспечивая консистентность.🔹 Улучшенные типы данных в коде (#58518, #58561, #58565, #58451): Продолжается работа над улучшением типизации в ядре фреймворка (хелпер
Arr, миграции, команды Console, фасад Cache), что улучшает анализ кода в IDE.🔹 Безопасность и обслуживание: Внутренние зависимости обновлены для устранения уязвимости в PHPUnit (CVE) и других проблем совместимости (#58526, #58542, #58563).
Релиз также содержит множество других правок, улучшающих стабильность, тестирование и взаимодействие с разработчиком: улучшения в компоненте
InteractsWithData для тестов (#58607, #58608), исправление двойного перевода сообщений об ошибках валидации (#58598), корректная обработка исключений при установке пакетов через Composer (#58609) и многие другие мелкие исправления и улучшения документации.Что в итоге?
Laravel 12.50.0 — релиз, который приносит ценные практические улучшения (уникальные слушатели, управление appends, фиксы в отношениях) и продолжает курс на более строгую и предсказуемую кодовую базу. Обновление можно установить через
composer update. Полный список изменений можно найти в официальном релизе
#Laravel #Laravel12
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥5❤1👍1